コード例 #1
0
 def test_get_application_info(self):
   self.setupAppStatusMocks()
   data1 = AppDashboardData()
   output = data1.get_application_info()
   self.assertEquals(len(output), 2)
   self.assertEquals(output['app1'], 'http://1.1.1.1:8080')
   self.assertEquals(output['app2'], None)
コード例 #2
0
 def test_update_status_info(self):
   self.setupServerStatusMocks()
   self.setupFakePutsAndDeletes()
   fake_get_appcontroller_client = flexmock()
   fake_get_appcontroller_client.should_receive('get_stats') \
     .and_return([
       {'ip' : '1.1.1.1',
        'cpu' : '50',
        'memory' : '50',
        'disk' : '50',
        'roles' : 'roles1'},
       {'ip' : '2.2.2.2',
        'cpu' : '50',
        'memory' : '50',
        'disk' : '50',
        'roles' : 'roles1'}
     ])
   flexmock(AppDashboardHelper).should_receive('get_appcontroller_client') \
     .and_return(fake_get_appcontroller_client).once()
   
   data1 = AppDashboardData()
   data1.update_status_info()
   output = data1.get_status_info()
   self.assertEquals(len(output), 2)
   self.assertEquals(output[0]['ip'], '1.1.1.1')
   self.assertEquals(output[1]['ip'], '2.2.2.2')
コード例 #3
0
  def test_update_users(self):
    flexmock(AppDashboardHelper).should_receive('list_all_users')\
      .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**']).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(False).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(False).once()

    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(False).once()

    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app1', 'app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app2']).once()

    self.setupUserInfoMocks()

    data1 = AppDashboardData()
    output = data1.update_users()
    self.assertEquals(len(output), 3)
    self.assertTrue(output[0].is_user_cloud_admin)
    self.assertFalse(output[1].is_user_cloud_admin)
    self.assertFalse(output[2].is_user_cloud_admin)
    self.assertTrue(output[0].can_upload_apps)
    self.assertTrue(output[1].can_upload_apps)
    self.assertFalse(output[2].can_upload_apps)
コード例 #4
0
 def test_get_status_info(self):
   self.setupServerStatusMocks()
   data1 = AppDashboardData()
   output = data1.get_status_info()
   self.assertEquals(len(output), 2)
   self.assertEquals(output[0]['ip'], '1.1.1.1')
   self.assertEquals(output[1]['ip'], '2.2.2.2')
コード例 #5
0
 def test_get_application_info(self):
     self.setupAppStatusMocks()
     data1 = AppDashboardData()
     output = data1.get_application_info()
     self.assertEquals(len(output), 2)
     self.assertEquals(output['app1'], 'http://1.1.1.1:8080')
     self.assertEquals(output['app2'], None)
コード例 #6
0
 def test_update_status_info(self):
   self.setupServerStatusMocks()
   self.setupFakePutsAndDeletes()
   fake_get_appcontroller_client = flexmock()
   fake_get_appcontroller_client.should_receive('get_stats') \
     .and_return([
       {'ip' : '1.1.1.1',
        'cpu' : '50',
        'memory' : '50',
        'disk' : '50',
        'roles' : 'roles1'},
       {'ip' : '2.2.2.2',
        'cpu' : '50',
        'memory' : '50',
        'disk' : '50',
        'roles' : 'roles1'}
     ])
   flexmock(AppDashboardHelper).should_receive('get_appcontroller_client') \
     .and_return(fake_get_appcontroller_client).once()
   
   data1 = AppDashboardData()
   data1.update_status_info()
   output = data1.get_status_info()
   self.assertEquals(len(output), 2)
   self.assertEquals(output[0]['ip'], '1.1.1.1')
   self.assertEquals(output[1]['ip'], '2.2.2.2')
コード例 #7
0
  def test_get_owned_apps(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()

    # First call, not logged in.
    output = data1.get_owned_apps()
    self.assertEqual(len(output), 0)

    # First user: [email protected], apps=app1,app2
    output = data1.get_owned_apps()
    self.assertTrue('app1' in output)
    self.assertTrue('app2' in output)

    # Second user: [email protected], apps=app2
    output = data1.get_owned_apps()
    self.assertTrue('app2' in output)

    # Third user: [email protected], admin=app2.
    output = data1.get_owned_apps()
    self.assertTrue('app2' in output)
コード例 #8
0
 def test_get_status_info(self):
   self.setupServerStatusMocks()
   data1 = AppDashboardData()
   output = data1.get_status_info()
   self.assertEquals(len(output), 2)
   self.assertEquals(output[0]['ip'], '1.1.1.1')
   self.assertEquals(output[1]['ip'], '2.2.2.2')
コード例 #9
0
  def test_update_users(self):
    flexmock(AppDashboardHelper).should_receive('list_all_users')\
      .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**']).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(False).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(False).once()

    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(False).once()

    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app1', 'app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app2']).once()

    self.setupUserInfoMocks()

    data1 = AppDashboardData()
    output = data1.update_users()
    self.assertEquals(len(output), 3)
    self.assertTrue(output[0].is_user_cloud_admin)
    self.assertFalse(output[1].is_user_cloud_admin)
    self.assertFalse(output[2].is_user_cloud_admin)
    self.assertTrue(output[0].can_upload_apps)
    self.assertTrue(output[1].can_upload_apps)
    self.assertFalse(output[2].can_upload_apps)
コード例 #10
0
 def test_get_api_status(self):
     self.setupApiStatusMocks()
     data1 = AppDashboardData()
     output = data1.get_api_status()
     self.assertEquals(len(output), 3)
     self.assertEquals(output['api1'], 'running')
     self.assertEquals(output['api2'], 'failed')
     self.assertEquals(output['api3'], 'unknown')
コード例 #11
0
 def test_get_api_status(self):
   self.setupApiStatusMocks()
   data1 = AppDashboardData()
   output = data1.get_api_status()
   self.assertEquals(len(output), 3)
   self.assertEquals(output['api1'], 'running')
   self.assertEquals(output['api2'], 'failed')
   self.assertEquals(output['api3'], 'unknown')
コード例 #12
0
  def test_get_monitoring_url(self):
    fake_ip  = '1.1.1.1.'
    flexmock(AppDashboardData).should_receive('get_head_node_ip')\
    .and_return(fake_ip).once()

    data1 = AppDashboardData()
    url = data1.get_monitoring_url()
    self.assertEquals(url, "http://{0}:{1}".format(fake_ip,
      AppDashboardData.MONITOR_PORT))
コード例 #13
0
    def test_update_users(self):
        flexmock(ndb).should_receive('put_multi').and_return()
        flexmock(AppDashboardHelper).should_receive('list_all_users')\
          .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']).once()
        flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
          .with_args('*****@*****.**').and_return(True).once()
        flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
          .with_args('*****@*****.**').and_return(False).once()
        flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
          .with_args('*****@*****.**').and_return(False).once()
        flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin') \
          .with_args('*****@*****.**').and_return(False).once()

        flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
          .with_args('*****@*****.**').and_return(True).once()
        flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
          .with_args('*****@*****.**').and_return(True).once()
        flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
          .with_args('*****@*****.**').and_return(False).once()
        flexmock(AppDashboardHelper).should_receive('can_upload_apps') \
          .with_args('*****@*****.**').and_return(False).once()

        flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
          .with_args('*****@*****.**').and_return(['app1', 'app2']).once()
        flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
          .with_args('*****@*****.**').and_return(['app2']).once()
        flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
          .with_args('*****@*****.**').and_return(['app2']).once()
        flexmock(AppDashboardHelper).should_receive('get_owned_apps') \
          .with_args('*****@*****.**').and_return([]).once()

        self.setupUserInfoMocks()

        data1 = AppDashboardData()

        output = data1.update_users()
        self.assertEquals(len(output), 4)
        self.assertTrue(output[0].is_user_cloud_admin)
        self.assertFalse(output[1].is_user_cloud_admin)
        self.assertFalse(output[2].is_user_cloud_admin)
        self.assertFalse(output[3].is_user_cloud_admin)
        self.assertTrue(output[0].can_upload_apps)
        self.assertTrue(output[1].can_upload_apps)
        self.assertFalse(output[2].can_upload_apps)
        self.assertFalse(output[3].can_upload_apps)
        self.assertEqual(
            self.flatten_dash_layout(output[0].dash_layout_settings),
            self.user_info1_cloud_admin_dict)
        self.assertEqual(
            self.flatten_dash_layout(output[1].dash_layout_settings),
            self.user_info2_can_upload_apps_dict)
        self.assertEqual(
            self.flatten_dash_layout(output[2].dash_layout_settings),
            self.user_info3_cannot_upload_apps_dict)
        self.assertEqual(
            self.flatten_dash_layout(output[3].dash_layout_settings),
            self.user_info4_cannot_upload_and_owns_no_apps_dict)
コード例 #14
0
  def test_get_monitoring_url(self):
    fake_ip  = '1.1.1.1.'
    flexmock(AppDashboardData).should_receive('get_head_node_ip')\
    .and_return(fake_ip).once()

    data1 = AppDashboardData()
    url = data1.get_monitoring_url()
    self.assertEquals(url, "http://{0}:{1}".format(fake_ip, 
      AppDashboardData.MONITOR_PORT))
コード例 #15
0
 def test_delete_app_from_datastore(self):
   flexmock(logging).should_receive('info').and_return()
   self.setupUserInfoMocks()
   self.setupAppStatusMocks()
   data1 = AppDashboardData()
   output = data1.delete_app_from_datastore('app2', email='*****@*****.**')
   app_list = output.owned_apps
   self.assertEquals(output.email, '*****@*****.**')
   self.assertFalse('app2' in app_list)
   self.assertTrue('app1' in app_list)
コード例 #16
0
 def test_delete_app_from_datastore(self):
   flexmock(logging).should_receive('info').and_return()
   self.setupUserInfoMocks()
   self.setupAppStatusMocks()
   data1 = AppDashboardData()
   output = data1.delete_app_from_datastore('app2', email='*****@*****.**')
   app_list = output.owned_apps
   self.assertEquals(output.email, '*****@*****.**')
   self.assertFalse('app2' in app_list)
   self.assertTrue('app1' in app_list)
コード例 #17
0
  def test_update_users(self):
    flexmock(ndb).should_receive('put_multi').and_return()
    flexmock(AppDashboardHelper).should_receive('list_all_users')\
      .and_return(['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(False).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin')\
      .with_args('*****@*****.**').and_return(False).once()
    flexmock(AppDashboardHelper).should_receive('is_user_cloud_admin') \
      .with_args('*****@*****.**').and_return(False).once()

    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(True).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps')\
      .with_args('*****@*****.**').and_return(False).once()
    flexmock(AppDashboardHelper).should_receive('can_upload_apps') \
      .with_args('*****@*****.**').and_return(False).once()

    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app1', 'app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps')\
      .with_args('*****@*****.**').and_return(['app2']).once()
    flexmock(AppDashboardHelper).should_receive('get_owned_apps') \
      .with_args('*****@*****.**').and_return([]).once()

    self.setupUserInfoMocks()

    data1 = AppDashboardData()

    output = data1.update_users()
    self.assertEquals(len(output), 4)
    self.assertTrue(output[0].is_user_cloud_admin)
    self.assertFalse(output[1].is_user_cloud_admin)
    self.assertFalse(output[2].is_user_cloud_admin)
    self.assertFalse(output[3].is_user_cloud_admin)
    self.assertTrue(output[0].can_upload_apps)
    self.assertTrue(output[1].can_upload_apps)
    self.assertFalse(output[2].can_upload_apps)
    self.assertFalse(output[3].can_upload_apps)
    self.assertEqual(self.flatten_dash_layout(output[0].dash_layout_settings),
                     self.user_info1_cloud_admin_dict)
    self.assertEqual(self.flatten_dash_layout(output[1].dash_layout_settings),
                     self.user_info2_can_upload_apps_dict)
    self.assertEqual(self.flatten_dash_layout(output[2].dash_layout_settings),
                     self.user_info3_cannot_upload_apps_dict)
    self.assertEqual(self.flatten_dash_layout(output[3].dash_layout_settings),
                     self.user_info4_cannot_upload_and_owns_no_apps_dict)
コード例 #18
0
ファイル: dashboard.py プロジェクト: evankanderson/appscale
 def __init__(self, request, response):
     """ Constructor.
 
 Args:
   request: The webapp2.Request object that contains information about the
     current web request.
   response: The webapp2.Response object that contains the response to be
     sent back to the browser.
 """
     self.initialize(request, response)
     self.helper = AppDashboardHelper()
     self.dstore = AppDashboardData(self.helper)
コード例 #19
0
 def get(self):
   """ Retrieves the cached information about applications running in this
   AppScale deployment as a JSON-encoded dict. """
   is_cloud_admin = AppDashboardHelper().is_user_cloud_admin()
   apps_user_is_admin_on = AppDashboardData().get_application_info()
   if not is_cloud_admin:
     apps_user_owns = AppDashboardHelper().get_owned_apps()
     new_app_dict = {}
     for app_name in apps_user_owns:
       if app_name in apps_user_is_admin_on:
         new_app_dict[app_name] = apps_user_is_admin_on.get(app_name)
     apps_user_is_admin_on = new_app_dict
   self.response.out.write(json.dumps(apps_user_is_admin_on))
コード例 #20
0
  def test_update_application_info_no_apps(self):
    flexmock(AppDashboardHelper).should_receive('get_status_info')\
      .and_return([{
        'apps' : { 'none' :  False }
      }]).once()
    flexmock(AppDashboardHelper).should_receive('get_login_host')\
      .and_return('1.1.1.1').never()
    flexmock(AppDashboardHelper).should_receive('get_app_port')\
      .and_return('8080').never()
    self.setupAppStatusMocks()
    self.setupFakePutsAndDeletes()

    data1 = AppDashboardData()
    output = data1.update_application_info()
    self.assertEquals(len(output), 0)
コード例 #21
0
  def test_update_application_info_no_apps(self):
    flexmock(AppDashboardHelper).should_receive('get_status_info')\
      .and_return([{
        'apps' : { 'none' :  False }
      }]).once()
    flexmock(AppDashboardHelper).should_receive('get_login_host')\
      .and_return('1.1.1.1').never()
    flexmock(AppDashboardHelper).should_receive('get_app_ports')\
      .and_return(['8080', '1444']).never()
    self.setupAppStatusMocks()
    self.setupFakePutsAndDeletes()

    data1 = AppDashboardData()
    output = data1.update_application_info()
    self.assertEquals(len(output), 0)
コード例 #22
0
    def test_update_application_info_two_apps(self):
        flexmock(AppDashboardHelper).should_receive('get_status_info')\
          .and_return([{
            'apps' : { 'app1' : True, 'app2' : False }
          }]).once()
        flexmock(AppDashboardHelper).should_receive('get_login_host')\
          .and_return('1.1.1.1').once()
        flexmock(AppDashboardHelper).should_receive('get_app_port')\
          .and_return('8080').once()
        self.setupAppStatusMocks()
        self.setupFakePutsAndDeletes()

        data1 = AppDashboardData()
        output = data1.update_application_info()
        self.assertEquals(len(output), 2)
        self.assertEquals(output['app1'], 'http://1.1.1.1:8080')
        self.assertEquals(output['app2'], None)
コード例 #23
0
    def test_get_owned_apps(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()

        # First call, not logged in.
        output = data1.get_owned_apps()
        self.assertEqual(len(output), 0)

        # First user: [email protected], apps=app1,app2
        output = data1.get_owned_apps()
        self.assertTrue('app1' in output)
        self.assertTrue('app2' in output)

        # Second user: [email protected], apps=app2
        output = data1.get_owned_apps()
        self.assertTrue('app2' in output)

        # Third user: [email protected], admin=app2.
        output = data1.get_owned_apps()
        self.assertTrue('app2' in output)

        # Fourth user: [email protected], admin=None.
        output = data1.get_owned_apps()
        self.assertTrue(not output)
コード例 #24
0
    def test_get_dash_layout_settings(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()

        # First call, not logged in.
        self.assertEqual(data1.get_dash_layout_settings(), {})

        # First user: [email protected], upload=True, cloud_admin=True
        self.assertEqual(
            self.flatten_dash_layout(data1.get_dash_layout_settings()),
            self.user_info1_cloud_admin_dict)

        # Second user: [email protected], upload=True, cloud_admin=False
        self.assertEqual(
            self.flatten_dash_layout(data1.get_dash_layout_settings()),
            self.user_info2_can_upload_apps_dict)

        # Third user: [email protected], upload=False, cloud_admin=False
        self.assertEqual(
            self.flatten_dash_layout(data1.get_dash_layout_settings()),
            self.user_info3_cannot_upload_apps_dict)

        # Fourth user: [email protected], upload=False, cloud_admin=False
        self.assertEqual(
            self.flatten_dash_layout(data1.get_dash_layout_settings()),
            self.user_info4_cannot_upload_and_owns_no_apps_dict)
コード例 #25
0
  def test_update_application_info_two_apps(self):
    flexmock(AppDashboardHelper).should_receive('get_status_info')\
      .and_return([{
        'apps' : { 'app1' : True, 'app2' : False }
      }]).once()
    flexmock(AppDashboardHelper).should_receive('get_login_host')\
      .and_return('1.1.1.1').once()
    flexmock(AppDashboardHelper).should_receive('get_app_ports')\
      .and_return(['8080', '1444']).once()
    self.setupAppStatusMocks()
    self.setupFakePutsAndDeletes()

    data1 = AppDashboardData()
    output = data1.update_application_info()
    self.assertEquals(len(output), 2)
    self.assertEquals(output['app1'], ['http://1.1.1.1:8080',
                                       'https://1.1.1.1:1444'])
    self.assertEquals(output['app2'], None)
コード例 #26
0
    def test_update_api_status(self):
        self.setupApiStatusMocks()
        self.setupFakePutsAndDeletes()
        fake_get_appcontroller_client = flexmock()
        fake_get_appcontroller_client.should_receive('get_api_status')\
          .and_return({
            'api1' : 'running',
            'api2' : 'failed',
            'api3' : 'unknown',
          })
        flexmock(AppDashboardHelper).should_receive('get_appcontroller_client')\
          .and_return(fake_get_appcontroller_client).once()

        data1 = AppDashboardData()
        data1.update_api_status()
        output = data1.get_api_status()
        self.assertEquals(len(output), 3)
        self.assertEquals(output['api1'], 'running')
        self.assertEquals(output['api2'], 'failed')
        self.assertEquals(output['api3'], 'unknown')
コード例 #27
0
  def test_can_upload_apps(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()

    # First call, not logged in.
    self.assertFalse(data1.can_upload_apps())

    # First user: [email protected], upload=True.
    self.assertTrue(data1.can_upload_apps())

    # Second user: [email protected], upload=True.
    self.assertTrue(data1.can_upload_apps())

    # Third user: [email protected], upload=False.
    self.assertFalse(data1.can_upload_apps())
コード例 #28
0
  def test_is_user_cloud_admin(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()

    # First call, not logged in.
    self.assertFalse(data1.is_user_cloud_admin())

    # First user: [email protected], admin=True.
    self.assertTrue(data1.is_user_cloud_admin())

    # Second user: [email protected], admin=False.
    self.assertFalse(data1.is_user_cloud_admin())

    # Third user: [email protected], admin=False.
    self.assertFalse(data1.is_user_cloud_admin())
コード例 #29
0
 def test_update_api_status(self):
   self.setupApiStatusMocks()
   self.setupFakePutsAndDeletes()
   fake_get_appcontroller_client = flexmock()
   fake_get_appcontroller_client.should_receive('get_api_status')\
     .and_return({
       'api1' : 'running',
       'api2' : 'failed',
       'api3' : 'unknown',
     })
   flexmock(AppDashboardHelper).should_receive('get_appcontroller_client')\
     .and_return(fake_get_appcontroller_client).once()
   
   data1 = AppDashboardData()
   data1.update_api_status()
   output = data1.get_api_status()
   self.assertEquals(len(output), 3)
   self.assertEquals(output['api1'], 'running')
   self.assertEquals(output['api2'], 'failed')
   self.assertEquals(output['api3'], 'unknown')
コード例 #30
0
 def __init__(self, request, response):
   """ Constructor.
   
   Args:
     request: The webapp2.Request object that contains information about the
       current web request.
     response: The webapp2.Response object that contains the response to be
       sent back to the browser.
   """
   self.initialize(request, response)
   self.helper = AppDashboardHelper()
   self.dstore = AppDashboardData(self.helper)
コード例 #31
0
  def test_get_dash_layout_settings(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()

    # First call, not logged in.
    self.assertEqual(data1.get_dash_layout_settings(), {})

    # First user: [email protected], upload=True, cloud_admin=True
    self.assertEqual(self.flatten_dash_layout(
      data1.get_dash_layout_settings()),
      self.user_info1_cloud_admin_dict)

    # Second user: [email protected], upload=True, cloud_admin=False
    self.assertEqual(self.flatten_dash_layout(
      data1.get_dash_layout_settings()),
      self.user_info2_can_upload_apps_dict)

    # Third user: [email protected], upload=False, cloud_admin=False
    self.assertEqual(self.flatten_dash_layout(
      data1.get_dash_layout_settings()),
      self.user_info3_cannot_upload_apps_dict)

    # Fourth user: [email protected], upload=False, cloud_admin=False
    self.assertEqual(self.flatten_dash_layout(
      data1.get_dash_layout_settings()),
      self.user_info4_cannot_upload_and_owns_no_apps_dict)
コード例 #32
0
    def test_rebuild_dash_layout_settings_dict_default(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()

        user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
        user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
        user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
        user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")

        # First call, not logged in.
        self.assertEqual({},
                         data1.rebuild_dash_layout_settings_dict(email=None))

        # First user: [email protected], upload=True, cloud_admin=True
        self.assertEqual(
            self.user_info1_cloud_admin_dict,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user1.email)))

        # Second user: [email protected], upload=True, cloud_admin=False
        self.assertEqual(
            self.user_info2_can_upload_apps_dict,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user2.email)))

        # Third user: [email protected], upload=False, cloud_admin=False
        self.assertEqual(
            self.user_info3_cannot_upload_apps_dict,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user3.email)))

        # Fourth user: [email protected], upload=False, cloud_admin=False
        self.assertEqual(
            self.user_info4_cannot_upload_and_owns_no_apps_dict,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user4.email)))
コード例 #33
0
  def test_rebuild_dash_layout_settings_dict_default(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()

    user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
    user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
    user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
    user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")

    # First call, not logged in.
    self.assertEqual({}, data1.rebuild_dash_layout_settings_dict(email=None))

    # First user: [email protected], upload=True, cloud_admin=True
    self.assertEqual(self.user_info1_cloud_admin_dict, self.flatten_dash_layout(
                     data1.rebuild_dash_layout_settings_dict(
                       email=user1.email)))

    # Second user: [email protected], upload=True, cloud_admin=False
    self.assertEqual(self.user_info2_can_upload_apps_dict,
                     self.flatten_dash_layout(
                       data1.rebuild_dash_layout_settings_dict(
                         email=user2.email)))

    # Third user: [email protected], upload=False, cloud_admin=False
    self.assertEqual(self.user_info3_cannot_upload_apps_dict,
                     self.flatten_dash_layout(
                       data1.rebuild_dash_layout_settings_dict(
                         email=user3.email)))

    # Fourth user: [email protected], upload=False, cloud_admin=False
    self.assertEqual(self.user_info4_cannot_upload_and_owns_no_apps_dict,
                     self.flatten_dash_layout(
                       data1.rebuild_dash_layout_settings_dict(
                         email=user4.email)))
コード例 #34
0
    def test_is_user_cloud_admin(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()

        # First call, not logged in.
        self.assertFalse(data1.is_user_cloud_admin())

        # First user: [email protected], admin=True.
        self.assertTrue(data1.is_user_cloud_admin())

        # Second user: [email protected], admin=False.
        self.assertFalse(data1.is_user_cloud_admin())

        # Third user: [email protected], admin=False.
        self.assertFalse(data1.is_user_cloud_admin())

        # Fourth user: [email protected], admin=False.
        self.assertFalse(data1.is_user_cloud_admin())
コード例 #35
0
    def test_can_upload_apps(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()

        # First call, not logged in.
        self.assertFalse(data1.can_upload_apps())

        # First user: [email protected], upload=True.
        self.assertTrue(data1.can_upload_apps())

        # Second user: [email protected], upload=True.
        self.assertTrue(data1.can_upload_apps())

        # Third user: [email protected], upload=False.
        self.assertFalse(data1.can_upload_apps())

        # Fourth user: [email protected], upload=False.
        self.assertFalse(data1.can_upload_apps())
コード例 #36
0
  def test_rebuild_dash_layout_settings_dict_custom(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()

    user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
    user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
    user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
    user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")

    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    # First user: [email protected], upload=True, cloud_admin=True
    user1_should_return = {
      "nav":["debugging_monitoring", "appscale_management", "app_management"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting, user_info=user1)),
      user1_should_return)
    self.assertEqual(user1_should_return,
                     self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict(
      email=user1.email)))

    # Second user: [email protected], upload=True, cloud_admin=False
    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    user2_should_return = {
      "nav":["debugging_monitoring", "app_management"],
      "panel":["upload_app","app_console"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting, user_info=user2)),
      user2_should_return)
    self.assertEqual(user2_should_return,
                     self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict(
                       email=user2.email)))

    # Third user: [email protected], upload=False, cloud_admin=False
    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    user3_should_return = {
      "nav":["debugging_monitoring"],
      "panel":["upload_app","app_console"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting, user_info=user3)),
      user3_should_return)
    self.assertEqual(user3_should_return,
                     self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict(
                       email=user3.email)))

    # Fourth user: [email protected], upload=False, cloud_admin=False
    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    user4_should_return = {
      "nav":[],
      "panel":["upload_app","app_console"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting, user_info=user4)),
      user4_should_return)
    self.assertEqual(user4_should_return,
                     self.flatten_dash_layout(data1.rebuild_dash_layout_settings_dict(
                       email=user4.email)))
コード例 #37
0
 def test_update_head_node_ip(self):
   fake_ip  = '1.1.1.1'
   self.assertEquals(fake_ip, AppDashboardData().update_head_node_ip())
コード例 #38
0
ファイル: dashboard.py プロジェクト: evankanderson/appscale
class AppDashboard(webapp2.RequestHandler):
    """ Class that all pages in the Dashboard must inherit from. """

    # Regular expression to capture the continue url.
    CONTINUE_URL_REGEX = 'continue=(.*)$'

    # Regular expression for updating user permissions.
    USER_PERMISSION_REGEX = '^user_permission_'

    # Regular expression that matches email addresses.
    USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$'

    # The frequency, in seconds, that defines how often Task Queue tasks are fired
    # to update the Dashboard's Datastore cache.
    REFRESH_WAIT_TIME = 10

    def __init__(self, request, response):
        """ Constructor.
    
    Args:
      request: The webapp2.Request object that contains information about the
        current web request.
      response: The webapp2.Response object that contains the response to be
        sent back to the browser.
    """
        self.initialize(request, response)
        self.helper = AppDashboardHelper()
        self.dstore = AppDashboardData(self.helper)

    def render_template(self, template_file, values=None):
        """ Renders a template file with all variables loaded.

    Args: 
      template_file: A str with the relative path to template file.
      values: A dict with key/value pairs used as variables in the jinja
        template files.
    Returns:
      A str with the rendered template.
    """
        if values is None:
            values = {}

        owned_apps = self.dstore.get_owned_apps()
        self.helper.update_cookie_app_list(owned_apps, self.request,
                                           self.response)

        template = jinja_environment.get_template(template_file)
        sub_vars = {
            'logged_in': self.helper.is_user_logged_in(),
            'user_email': self.helper.get_user_email(),
            'is_user_cloud_admin': self.dstore.is_user_cloud_admin(),
            'can_upload_apps': self.dstore.can_upload_apps(),
            'apps_user_is_admin_on': owned_apps,
            'flower_url': self.dstore.get_flower_url(),
            'monit_url': self.dstore.get_monit_url()
        }
        for key in values.keys():
            sub_vars[key] = values[key]
        return template.render(sub_vars)

    def get_shared_navigation(self):
        """ Renders the shared navigation.

    Returns:
      A str with the navigation bar rendered.
    """
        show_create_account = True
        if AppDashboardHelper.USE_SHIBBOLETH:
            show_create_account = False
        return self.render_template(
            template_file='shared/navigation.html',
            values={'show_create_account': show_create_account})

    def render_page(self, page, template_file, values=None):
        """ Renders a template with the main layout and nav bar. """
        if values is None:
            values = {}
        self.response.headers['Content-Type'] = 'text/html'
        template = jinja_environment.get_template('layouts/main.html')
        self.response.out.write(
            template.render(page_name=page,
                            page_body=self.render_template(
                                template_file, values),
                            shared_navigation=self.get_shared_navigation()))
コード例 #39
0
 def test_get_database_info(self):
   data1 = AppDashboardData()
   output = data1.get_database_info()
   self.assertEquals(output['table'], 'table')
   self.assertEquals(output['replication'], 3)
コード例 #40
0
    def test_rebuild_dash_layout_settings_dict_custom(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()

        user1 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
        user2 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
        user3 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")
        user4 = data1.get_by_id(app_dashboard_data.UserInfo, "*****@*****.**")

        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        # First user: [email protected], upload=True, cloud_admin=True
        user1_should_return = {
            "nav":
            ["debugging_monitoring", "appscale_management", "app_management"],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting,
                                               user_info=user1)),
            user1_should_return)
        self.assertEqual(
            user1_should_return,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user1.email)))

        # Second user: [email protected], upload=True, cloud_admin=False
        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        user2_should_return = {
            "nav": ["debugging_monitoring", "app_management"],
            "panel": ["upload_app", "app_console"]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting,
                                               user_info=user2)),
            user2_should_return)
        self.assertEqual(
            user2_should_return,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user2.email)))

        # Third user: [email protected], upload=False, cloud_admin=False
        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        user3_should_return = {
            "nav": ["debugging_monitoring"],
            "panel": ["upload_app", "app_console"]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting,
                                               user_info=user3)),
            user3_should_return)
        self.assertEqual(
            user3_should_return,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user3.email)))

        # Fourth user: [email protected], upload=False, cloud_admin=False
        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        user4_should_return = {
            "nav": [],
            "panel": ["upload_app", "app_console"]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting,
                                               user_info=user4)),
            user4_should_return)
        self.assertEqual(
            user4_should_return,
            self.flatten_dash_layout(
                data1.rebuild_dash_layout_settings_dict(email=user4.email)))
コード例 #41
0
 def test_init(self):
   data1 = AppDashboardData()
   self.assertNotEquals(None, data1.helper)
   
   data2 = AppDashboardData(flexmock())
   self.assertNotEquals(None, data2.helper)
コード例 #42
0
 def test_get_head_node_ip(self):
   data1 = AppDashboardData()
   fake_ip  = '1.1.1.1'
   self.assertEquals(data1.get_head_node_ip(), fake_ip)
コード例 #43
0
 def test_get_head_node_ip(self):
   data1 = AppDashboardData()
   fake_ip  = '1.1.1.1'
   self.assertEquals(data1.get_head_node_ip(), fake_ip)
コード例 #44
0
  def test_set_dash_layout_settings_with_argument(self):
    # slip in some fake users
    self.setupUserInfoMocks()

    # mock out the App Engine Users API
    self.setupUsersAPIMocks()

    data1 = AppDashboardData()
    #Sending new dictionaries

    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }

    self.assertEqual(data1.set_dash_layout_settings(values=user_setting), None)

    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }

    # First user: [email protected], upload=True, cloud_admin=True
    user1_should_return = {
      "nav":["debugging_monitoring", "appscale_management", "app_management"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting)),
      user1_should_return)

    # Second user: [email protected], upload=True, cloud_admin=False
    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    user2_should_return = {
      "nav":["debugging_monitoring", "app_management"],
      "panel":["upload_app","app_console"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting)),
      user2_should_return)

    # Third user: [email protected], upload=False, cloud_admin=False
    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    user3_should_return = {
      "nav":["debugging_monitoring"],
      "panel":["upload_app","app_console"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting)),
      user3_should_return)

    # Fourth user: [email protected], upload=False, cloud_admin=False
    user_setting = {
      "nav":["debugging_monitoring", "appscale_management", "app_management",
             "invalid_key"],
      "panel":["cloud_stats","database_stats","upload_app","app_console",
               "memcache_stats"]
    }
    user4_should_return = {
      "nav":[],
      "panel":["upload_app","app_console"]
    }
    self.assertEqual(self.flatten_dash_layout(
      data1.set_dash_layout_settings(values=user_setting)),
      user4_should_return)
コード例 #45
0
 def test_update_database_info(self):
   fake_get_appcontroller_client = flexmock()
   data = AppDashboardData()
   output = data.update_database_info()
   self.assertEquals(output['table'], 'table')
   self.assertEquals(output['replication'], 3)
コード例 #46
0
ファイル: dashboard.py プロジェクト: evankanderson/appscale
 def get(self):
     """ Retrieves the cached information about machine-level statistics as a
 JSON-encoded dict. """
     self.response.out.write(
         json.dumps(AppDashboardData().get_status_info()))
コード例 #47
0
    def test_set_dash_layout_settings_with_argument(self):
        # slip in some fake users
        self.setupUserInfoMocks()

        # mock out the App Engine Users API
        self.setupUsersAPIMocks()

        data1 = AppDashboardData()
        #Sending new dictionaries

        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }

        self.assertEqual(data1.set_dash_layout_settings(values=user_setting),
                         None)

        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }

        # First user: [email protected], upload=True, cloud_admin=True
        user1_should_return = {
            "nav":
            ["debugging_monitoring", "appscale_management", "app_management"],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting)),
            user1_should_return)

        # Second user: [email protected], upload=True, cloud_admin=False
        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        user2_should_return = {
            "nav": ["debugging_monitoring", "app_management"],
            "panel": ["upload_app", "app_console"]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting)),
            user2_should_return)

        # Third user: [email protected], upload=False, cloud_admin=False
        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        user3_should_return = {
            "nav": ["debugging_monitoring"],
            "panel": ["upload_app", "app_console"]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting)),
            user3_should_return)

        # Fourth user: [email protected], upload=False, cloud_admin=False
        user_setting = {
            "nav": [
                "debugging_monitoring", "appscale_management",
                "app_management", "invalid_key"
            ],
            "panel": [
                "cloud_stats", "database_stats", "upload_app", "app_console",
                "memcache_stats"
            ]
        }
        user4_should_return = {
            "nav": [],
            "panel": ["upload_app", "app_console"]
        }
        self.assertEqual(
            self.flatten_dash_layout(
                data1.set_dash_layout_settings(values=user_setting)),
            user4_should_return)
コード例 #48
0
ファイル: dashboard.py プロジェクト: evankanderson/appscale
 def get(self):
     """ Retrieves the cached information about applications running in this
 AppScale deployment as a JSON-encoded dict. """
     self.response.out.write(
         json.dumps(AppDashboardData().get_application_info()))
コード例 #49
0
class AppDashboard(webapp2.RequestHandler):
  """ Class that all pages in the Dashboard must inherit from. """


  # Regular expression to capture the continue url.
  CONTINUE_URL_REGEX = 'continue=(.*)$'


  # Regular expression for updating user permissions.
  USER_PERMISSION_REGEX = '^user_permission_'


  # Regular expression that matches email addresses.
  USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$'


  # The frequency, in seconds, that defines how often Task Queue tasks are fired
  # to update the Dashboard's Datastore cache.
  REFRESH_WAIT_TIME = 10


  def __init__(self, request, response):
    """ Constructor.
    
    Args:
      request: The webapp2.Request object that contains information about the
        current web request.
      response: The webapp2.Response object that contains the response to be
        sent back to the browser.
    """
    self.initialize(request, response)
    self.helper = AppDashboardHelper()
    self.dstore = AppDashboardData(self.helper)


  def render_template(self, template_file, values=None):
    """ Renders a template file with all variables loaded.

    Args: 
      template_file: A str with the relative path to template file.
      values: A dict with key/value pairs used as variables in the jinja
        template files.
    Returns:
      A str with the rendered template.
    """
    if values is None:
      values = {}

    owned_apps = self.dstore.get_owned_apps()
    self.helper.update_cookie_app_list(owned_apps, self.request, self.response)

    template = jinja_environment.get_template(template_file)
    sub_vars = {
      'logged_in' : self.helper.is_user_logged_in(),
      'user_email' : self.helper.get_user_email(),
      'is_user_cloud_admin' : self.dstore.is_user_cloud_admin(),
      'can_upload_apps' : self.dstore.can_upload_apps(),
      'apps_user_is_admin_on' : owned_apps,
      'flower_url' : self.dstore.get_flower_url(),
    }
    for key in values.keys():
      sub_vars[key] = values[key]
    return template.render(sub_vars)


  def get_shared_navigation(self):
    """ Renders the shared navigation.

    Returns:
      A str with the navigation bar rendered.
    """
    return self.render_template(template_file='shared/navigation.html')

  def render_page(self, page, template_file, values=None ):
    """ Renders a template with the main layout and nav bar. """
    if values is None:
      values = {}
    self.response.headers['Content-Type'] = 'text/html'
    template = jinja_environment.get_template('layouts/main.html')
    self.response.out.write(template.render(
        page_name=page,
        page_body=self.render_template(template_file, values),
        shared_navigation=self.get_shared_navigation()
        ))
コード例 #50
0
ファイル: app_dashboard.py プロジェクト: AppScale/appscale
class AppDashboard(webapp2.RequestHandler):
  """ Class that all pages in the Dashboard must inherit from. """

  # Regular expression to capture the continue url.
  CONTINUE_URL_REGEX = 'continue=(.*)$'

  # The dashboard's project ID.
  PROJECT_ID = 'appscaledashboard'

  # Regular expression for updating user permissions.
  USER_PERMISSION_REGEX = '^user_permission_'

  # Regular expression that matches email addresses.
  USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$'

  # The frequency, in seconds, that defines how often Task Queue tasks are fired
  # to update the Dashboard's Datastore cache.
  REFRESH_WAIT_TIME = 10

  def __init__(self, request, response):
    """ Constructor.

    Args:
      request: The webapp2.Request object that contains information about the
        current web request.
      response: The webapp2.Response object that contains the response to be
        sent back to the browser.
    """
    self.initialize(request, response)
    self.helper = AppDashboardHelper()
    self.dstore = AppDashboardData(self.helper)

  def render_template(self, template_file, values=None):
    """ Renders a template file with all variables loaded.

    Args:
      template_file: A str with the relative path to template file.
      values: A dict with key/value pairs used as variables in the jinja
        template files.
    Returns:
      A str with the rendered template.
    """
    if values is None:
      values = {}

    is_cloud_admin = self.helper.is_user_cloud_admin()
    all_versions = self.helper.get_version_info()

    if is_cloud_admin:
      apps_user_owns = list({version.split('_')[0]
                             for version in all_versions})
    else:
      apps_user_owns = self.helper.get_owned_apps()

    versions_user_is_admin_on = {
      version: all_versions[version] for version in all_versions
      if version.split('_')[0] in apps_user_owns}

    self.helper.update_cookie_app_list(apps_user_owns, self.request,
                                       self.response)
    template = jinja_environment.get_template(template_file)
    sub_vars = {
      'logged_in': self.helper.is_user_logged_in(),
      'user_email': self.helper.get_user_email(),
      'is_user_cloud_admin': self.dstore.is_user_cloud_admin(),
      'can_upload_apps': self.dstore.can_upload_apps(),
      'versions_user_is_admin_on': versions_user_is_admin_on,
      'user_layout_pref': self.dstore.get_dash_layout_settings(),
      'flower_url': self.dstore.get_flower_url(),
      'monit_url': self.dstore.get_monit_url()
    }
    for key in values.keys():
      sub_vars[key] = values[key]
    return template.render(sub_vars)

  def get_shared_navigation(self, page):
    """ Renders the shared navigation.

    Args:
      page: A string specifying the page ID.
    Returns:
      A str with the navigation bar rendered.
    """
    show_create_account = True
    if AppDashboardHelper.USE_SHIBBOLETH:
      show_create_account = False

    # These sections do not lend themselves well to having panels.
    panel_blacklist = ['monit', 'taskqueue', 'datastore_viewer']
    return self.render_template(template_file='shared/navigation.html',
                                values={'show_create_account':
                                        show_create_account,
                                        'page_name': page,
                                        'panel_blacklist': panel_blacklist})

  def render_page(self, page, template_file, values=None):
    """ Renders a template with the main layout and nav bar.

    Args:
      page: A string specifying the page ID.
      template_file: A string specifying the template to use.
      values: A dictionary containing template variables.
    """
    if values is None:
      values = {}
    self.response.headers['Content-Type'] = 'text/html'
    template = jinja_environment.get_template('layouts/main.html')
    self.response.out.write(template.render(
      page_name=page,
      page_body=self.render_template(template_file, values),
      shared_navigation=self.get_shared_navigation(page)
    ))

  def render_app_page(self, page, values=None):
    """ Render a typical page using the app_page template.

    Args:
      page: A string specifying the page ID.
      values: A dictionary containing template variables.
    """
    self.render_page(page=page, template_file="layouts/app_page.html",
                     values=values)
コード例 #51
0
 def test_get_database_info(self):
   data1 = AppDashboardData()
   output = data1.get_database_info()
   self.assertEquals(output['table'], 'table')
   self.assertEquals(output['replication'], 3)
コード例 #52
0
 def test_update_database_info(self):
   fake_get_appcontroller_client = flexmock()
   data = AppDashboardData()
   output = data.update_database_info()
   self.assertEquals(output['table'], 'table')
   self.assertEquals(output['replication'], 3)
コード例 #53
0
class AppDashboard(webapp2.RequestHandler):
    """ Class that all pages in the Dashboard must inherit from. """

    # Regular expression to capture the continue url.
    CONTINUE_URL_REGEX = 'continue=(.*)$'

    # The dashboard's project ID.
    PROJECT_ID = 'appscaledashboard'

    # Regular expression for updating user permissions.
    USER_PERMISSION_REGEX = '^user_permission_'

    # Regular expression that matches email addresses.
    USER_EMAIL_REGEX = '^\w[^@\s]*@[^@\s]{2,}$'

    # The frequency, in seconds, that defines how often Task Queue tasks are fired
    # to update the Dashboard's Datastore cache.
    REFRESH_WAIT_TIME = 10

    def __init__(self, request, response):
        """ Constructor.

    Args:
      request: The webapp2.Request object that contains information about the
        current web request.
      response: The webapp2.Response object that contains the response to be
        sent back to the browser.
    """
        self.initialize(request, response)
        self.helper = AppDashboardHelper()
        self.dstore = AppDashboardData(self.helper)

    def render_template(self, template_file, values=None):
        """ Renders a template file with all variables loaded.

    Args:
      template_file: A str with the relative path to template file.
      values: A dict with key/value pairs used as variables in the jinja
        template files.
    Returns:
      A str with the rendered template.
    """
        if values is None:
            values = {}

        is_cloud_admin = self.helper.is_user_cloud_admin()
        all_versions = self.helper.get_version_info()

        if is_cloud_admin:
            apps_user_owns = list(
                {version.split('_')[0]
                 for version in all_versions})
        else:
            apps_user_owns = self.helper.get_owned_apps()

        versions_user_is_admin_on = {
            version: all_versions[version]
            for version in all_versions
            if version.split('_')[0] in apps_user_owns
        }

        self.helper.update_cookie_app_list(apps_user_owns, self.request,
                                           self.response)
        template = jinja_environment.get_template(template_file)
        sub_vars = {
            'logged_in': self.helper.is_user_logged_in(),
            'user_email': self.helper.get_user_email(),
            'is_user_cloud_admin': self.dstore.is_user_cloud_admin(),
            'can_upload_apps': self.dstore.can_upload_apps(),
            'versions_user_is_admin_on': versions_user_is_admin_on,
            'user_layout_pref': self.dstore.get_dash_layout_settings(),
            'flower_url': self.dstore.get_flower_url(),
            'monit_url': self.dstore.get_monit_url()
        }
        for key in values.keys():
            sub_vars[key] = values[key]
        return template.render(sub_vars)

    def get_shared_navigation(self, page):
        """ Renders the shared navigation.

    Args:
      page: A string specifying the page ID.
    Returns:
      A str with the navigation bar rendered.
    """
        show_create_account = True
        if AppDashboardHelper.USE_SHIBBOLETH:
            show_create_account = False

        # These sections do not lend themselves well to having panels.
        panel_blacklist = ['monit', 'taskqueue', 'datastore_viewer']
        return self.render_template(template_file='shared/navigation.html',
                                    values={
                                        'show_create_account':
                                        show_create_account,
                                        'page_name': page,
                                        'panel_blacklist': panel_blacklist
                                    })

    def render_page(self, page, template_file, values=None):
        """ Renders a template with the main layout and nav bar.

    Args:
      page: A string specifying the page ID.
      template_file: A string specifying the template to use.
      values: A dictionary containing template variables.
    """
        if values is None:
            values = {}
        self.response.headers['Content-Type'] = 'text/html'
        template = jinja_environment.get_template('layouts/main.html')
        self.response.out.write(
            template.render(
                page_name=page,
                page_body=self.render_template(template_file, values),
                shared_navigation=self.get_shared_navigation(page)))

    def render_app_page(self, page, values=None):
        """ Render a typical page using the app_page template.

    Args:
      page: A string specifying the page ID.
      values: A dictionary containing template variables.
    """
        self.render_page(page=page,
                         template_file="layouts/app_page.html",
                         values=values)