| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you 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. |
| // |
| |
| package com.cloud.vm.dao; |
| |
| import java.util.Date; |
| import java.util.List; |
| |
| import com.cloud.utils.Pair; |
| import com.cloud.utils.db.Filter; |
| import org.apache.commons.collections.CollectionUtils; |
| |
| import com.cloud.utils.db.GenericDaoBase; |
| import com.cloud.utils.db.SearchBuilder; |
| import com.cloud.utils.db.SearchCriteria; |
| import com.cloud.vm.ConsoleSessionVO; |
| |
| public class ConsoleSessionDaoImpl extends GenericDaoBase<ConsoleSessionVO, Long> implements ConsoleSessionDao { |
| private static final String ID = "id"; |
| private static final String DOMAIN_IDS = "domainIds"; |
| private static final String ACCOUNT_ID = "accountId"; |
| private static final String USER_ID = "userId"; |
| private static final String HOST_ID = "hostId"; |
| private static final String INSTANCE_ID = "instanceId"; |
| private static final String VM_IDS = "vmIds"; |
| private static final String START_DATE = "startDate"; |
| private static final String END_DATE = "endDate"; |
| private static final String CREATOR_ADDRESS = "creatorAddress"; |
| private static final String CLIENT_ADDRESS = "clientAddress"; |
| private static final String ACQUIRED = "acquired"; |
| private static final String CREATED = "created"; |
| private static final String REMOVED = "removed"; |
| private static final String REMOVED_NOT_NULL = "removedNotNull"; |
| |
| private final SearchBuilder<ConsoleSessionVO> searchByRemovedDate; |
| |
| public ConsoleSessionDaoImpl() { |
| searchByRemovedDate = createSearchBuilder(); |
| searchByRemovedDate.and(REMOVED_NOT_NULL, searchByRemovedDate.entity().getRemoved(), SearchCriteria.Op.NNULL); |
| searchByRemovedDate.and(REMOVED, searchByRemovedDate.entity().getRemoved(), SearchCriteria.Op.LTEQ); |
| } |
| |
| @Override |
| public void removeSession(String sessionUuid) { |
| ConsoleSessionVO session = findByUuid(sessionUuid); |
| remove(session.getId()); |
| } |
| |
| @Override |
| public boolean isSessionAllowed(String sessionUuid) { |
| ConsoleSessionVO consoleSessionVO = findByUuid(sessionUuid); |
| if (consoleSessionVO == null) { |
| return false; |
| } |
| return consoleSessionVO.getAcquired() == null; |
| } |
| |
| @Override |
| public int expungeSessionsOlderThanDate(Date date) { |
| SearchCriteria<ConsoleSessionVO> searchCriteria = searchByRemovedDate.create(); |
| searchCriteria.setParameters(REMOVED, date); |
| return expunge(searchCriteria); |
| } |
| |
| @Override |
| public void acquireSession(String sessionUuid, String clientAddress) { |
| ConsoleSessionVO consoleSessionVO = findByUuid(sessionUuid); |
| consoleSessionVO.setAcquired(new Date()); |
| consoleSessionVO.setClientAddress(clientAddress); |
| update(consoleSessionVO.getId(), consoleSessionVO); |
| } |
| |
| @Override |
| public int expungeByVmList(List<Long> vmIds, Long batchSize) { |
| if (CollectionUtils.isEmpty(vmIds)) { |
| return 0; |
| } |
| SearchBuilder<ConsoleSessionVO> sb = createSearchBuilder(); |
| sb.and(VM_IDS, sb.entity().getInstanceId(), SearchCriteria.Op.IN); |
| SearchCriteria<ConsoleSessionVO> sc = sb.create(); |
| sc.setParameters(VM_IDS, vmIds.toArray()); |
| return batchExpunge(sc, batchSize); |
| } |
| |
| @Override |
| public Pair<List<ConsoleSessionVO>, Integer> listConsoleSessions(Long id, List<Long> domainIds, Long accountId, Long userId, Long hostId, |
| Date startDate, Date endDate, Long instanceId, |
| String consoleEndpointCreatorAddress, String clientAddress, |
| boolean activeOnly, boolean acquired, Long pageSizeVal, Long startIndex) { |
| Filter filter = new Filter(ConsoleSessionVO.class, CREATED, false, startIndex, pageSizeVal); |
| SearchCriteria<ConsoleSessionVO> searchCriteria = createListConsoleSessionsSearchCriteria(id, domainIds, accountId, userId, hostId, |
| startDate, endDate, instanceId, consoleEndpointCreatorAddress, clientAddress, activeOnly, acquired); |
| |
| return searchAndCount(searchCriteria, filter, true); |
| } |
| |
| private SearchCriteria<ConsoleSessionVO> createListConsoleSessionsSearchCriteria(Long id, List<Long> domainIds, Long accountId, Long userId, Long hostId, |
| Date startDate, Date endDate, Long instanceId, |
| String consoleEndpointCreatorAddress, String clientAddress, |
| boolean activeOnly, boolean acquired) { |
| SearchCriteria<ConsoleSessionVO> searchCriteria = createListConsoleSessionsSearchBuilder(activeOnly, acquired).create(); |
| |
| searchCriteria.setParametersIfNotNull(ID, id); |
| searchCriteria.setParametersIfNotNull(DOMAIN_IDS, domainIds.toArray()); |
| searchCriteria.setParametersIfNotNull(ACCOUNT_ID, accountId); |
| searchCriteria.setParametersIfNotNull(USER_ID, userId); |
| searchCriteria.setParametersIfNotNull(HOST_ID, hostId); |
| searchCriteria.setParametersIfNotNull(INSTANCE_ID, instanceId); |
| searchCriteria.setParametersIfNotNull(START_DATE, startDate); |
| searchCriteria.setParametersIfNotNull(END_DATE, endDate); |
| searchCriteria.setParametersIfNotNull(CREATOR_ADDRESS, consoleEndpointCreatorAddress); |
| searchCriteria.setParametersIfNotNull(CLIENT_ADDRESS, clientAddress); |
| |
| return searchCriteria; |
| } |
| |
| private SearchBuilder<ConsoleSessionVO> createListConsoleSessionsSearchBuilder(boolean activeOnly, boolean acquired) { |
| SearchBuilder<ConsoleSessionVO> searchBuilder = createSearchBuilder(); |
| |
| searchBuilder.and(ID, searchBuilder.entity().getId(), SearchCriteria.Op.EQ); |
| searchBuilder.and(DOMAIN_IDS, searchBuilder.entity().getDomainId(), SearchCriteria.Op.IN); |
| searchBuilder.and(ACCOUNT_ID, searchBuilder.entity().getAccountId(), SearchCriteria.Op.EQ); |
| searchBuilder.and(USER_ID, searchBuilder.entity().getUserId(), SearchCriteria.Op.EQ); |
| searchBuilder.and(HOST_ID, searchBuilder.entity().getHostId(), SearchCriteria.Op.EQ); |
| searchBuilder.and(INSTANCE_ID, searchBuilder.entity().getInstanceId(), SearchCriteria.Op.EQ); |
| searchBuilder.and(START_DATE, searchBuilder.entity().getCreated(), SearchCriteria.Op.GTEQ); |
| searchBuilder.and(END_DATE, searchBuilder.entity().getCreated(), SearchCriteria.Op.LTEQ); |
| searchBuilder.and(CREATOR_ADDRESS, searchBuilder.entity().getConsoleEndpointCreatorAddress(), SearchCriteria.Op.EQ); |
| searchBuilder.and(CLIENT_ADDRESS, searchBuilder.entity().getClientAddress(), SearchCriteria.Op.EQ); |
| |
| if (activeOnly) { |
| searchBuilder.and(ACQUIRED, searchBuilder.entity().getAcquired(), SearchCriteria.Op.NNULL); |
| searchBuilder.and(REMOVED, searchBuilder.entity().getRemoved(), SearchCriteria.Op.NULL); |
| } else if (acquired) { |
| searchBuilder.and(ACQUIRED, searchBuilder.entity().getAcquired(), SearchCriteria.Op.NNULL); |
| } |
| |
| searchBuilder.done(); |
| return searchBuilder; |
| } |
| } |