summaryrefslogtreecommitdiffstats
path: root/api/database/v2/models.py
blob: 64d49cc9da546e707668c9b352ee6fbafb81698f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
##############################################################################
# Copyright (c) 2017 Huawei Technologies Co.,Ltd.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
from __future__ import absolute_import
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import Text
from sqlalchemy import DateTime
from sqlalchemy import Boolean

from api.database import Base


class V2Environment(Base):
    __tablename__ = 'v2_environment'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    name = Column(String(30))
    description = Column(Text)
    openrc_id = Column(String(10))
    image_id = Column(String(30))
    container_id = Column(Text)
    pod_id = Column(String(10))
    time = Column(DateTime)


class V2Openrc(Base):
    __tablename__ = 'V2_openrc'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    name = Column(String(30))
    description = Column(Text)
    environment_id = Column(String(30))
    content = Column(Text)
    time = Column(DateTime)


class V2Image(Base):
    __tablename__ = 'v2_image'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    name = Column(String(30))
    description = Column(Text)
    environment_id = Column(String(30))
    size = Column(String(30))
    status = Column(String(30))
    time = Column(DateTime)


class V2Container(Base):
    __tablename__ = 'v2_container'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    name = Column(String(30))
    environment_id = Column(String(30))
    status = Column(Integer)
    port = Column(Integer)
    time = Column(String(30))


class V2Pod(Base):
    __tablename__ = 'v2_pod'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    environment_id = Column(String(30))
    content = Column(Text)
    time = Column(String(30))


class V2Project(Base):
    __tablename__ = 'v2_project'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    name = Column(String(30))
    description = Column(Text)
    time = Column(DateTime)
    tasks = Column(Text)


class V2Task(Base):
    __tablename__ = 'v2_task'
    id = Column(Integer, primary_key=True)
    uuid = Column(String(30))
    name = Column(String(30))
    description = Column(Text)
    project_id = Column(String(30))
    environment_id = Column(String(30))
    time = Column(DateTime)
    case_name = Column(String(30))
    suite = Column(Boolean)
    content = Column(Text)
    result = Column(Text)
    error = Column(Text)
    status = Column(Integer)
lass="p">: match = hugepage_free_re.search(line) if match: _LOGGER.info('Hugepages free: %s %s', match.group('free_hp'), 'on socket {}'.format(socket) if socket else '') return int(match.group('free_hp')) _LOGGER.info('Could not parse for hugepage size') return 0 def is_hugepage_available(): """Check if hugepages are configured/available on the system. """ hugepage_size_re = re.compile(r'^Hugepagesize:\s+(?P<size_hp>\d+)\s+kB', re.IGNORECASE) # read in meminfo with open('/proc/meminfo') as mem_file: mem_info = mem_file.readlines() # see if the hugepage size is the recommended value for line in mem_info: match_size = hugepage_size_re.match(line) if match_size: if match_size.group('size_hp') != '1048576': _LOGGER.info( '%s%s%s kB', 'Hugepages not configured for recommend 1GB size. ', 'Currently set at ', match_size.group('size_hp')) num_huge = get_free_hugepages() if num_huge == 0: _LOGGER.info('No free hugepages.') if not allocate_hugepages(): return False else: _LOGGER.info('Found \'%s\' free hugepage(s).', num_huge) return True def is_hugepage_mounted(): """Check if hugepages are mounted. """ output = subprocess.check_output(['mount'], shell=True) my_encoding = locale.getdefaultlocale()[1] for line in output.decode(my_encoding).split('\n'): if 'hugetlbfs' in line: return True return False def mount_hugepages(): """Ensure hugepages are mounted. Raises RuntimeError if no configured hugepages are available. """ if not is_hugepage_available(): raise RuntimeError('No Hugepages configured.') if is_hugepage_mounted(): return if not os.path.exists(settings.getValue('HUGEPAGE_DIR')): tasks.run_task(['sudo', 'mkdir', settings.getValue('HUGEPAGE_DIR')], _LOGGER, 'Creating directory ' + settings.getValue('HUGEPAGE_DIR'), True) try: tasks.run_task(['sudo', 'mount', '-t', 'hugetlbfs', 'nodev', settings.getValue('HUGEPAGE_DIR')], _LOGGER, 'Mounting hugepages...', True) except subprocess.CalledProcessError: _LOGGER.error('Unable to mount hugepages.') def umount_hugepages(): """Ensure hugepages are unmounted. """ if not is_hugepage_mounted(): return try: tasks.run_task(['sudo', 'umount', settings.getValue('HUGEPAGE_DIR')], _LOGGER, 'Unmounting hugepages...', True) except subprocess.CalledProcessError: _LOGGER.error('Unable to umount hugepages.') if not deallocate_hugepages(): _LOGGER.error('Unable to deallocate previously allocated hugepages.')