SystemStatusController.java

/*
 * Copyright 2020 Global Crop Diversity Trust
 *
 * Licensed 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 org.gringlobal.api.v1.impl;

import org.apache.commons.lang3.StringUtils;
import org.genesys.blocks.oauth.persistence.OAuthClientRepository;
import org.genesys.blocks.security.SecurityContextUtil;
import org.gringlobal.api.v1.ApiBaseController;
import org.gringlobal.persistence.AccessionRepository;
import org.gringlobal.persistence.GeographyRepository;
import org.gringlobal.persistence.InventoryRepository;
import org.gringlobal.persistence.SysUserRepository;
import org.gringlobal.persistence.TaxonomySpeciesRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.tags.Tag;

@RestController("statusApi1")
@RequestMapping(SystemStatusController.API_URL)
@PreAuthorize("isAuthenticated()")
@Tag(name = "Status")
public class SystemStatusController {

	/** The Constant API_URL. */
	public static final String API_URL = ApiBaseController.APIv1_BASE + "/status";

	@Value("${captcha.enabled}")
	private Boolean captchaEnabled;

	@Value("${mail.host}")
	private String mailHost;

	@Autowired
	private OAuthClientRepository oauthClientRepository;

	@Autowired
	private SysUserRepository sysUserRepository;

	@Autowired
	private GeographyRepository geographyRepository;

	@Autowired
	private TaxonomySpeciesRepository taxonomySpeciesRepository;

	@Autowired
	private AccessionRepository accessionRepository;

	@Autowired
	private InventoryRepository inventoryRepository;

	@GetMapping
	public SystemStatus getSystemStatus() {
		SystemStatus status = new SystemStatus();
		status.userCount = sysUserRepository.count();
		status.speciesCount = taxonomySpeciesRepository.count();
		status.accessionCount = accessionRepository.count();
		status.geographyCount = geographyRepository.count();
		status.inventoryCount = inventoryRepository.count();
		if (captchaEnabled) {
			var oAuthClient = oauthClientRepository.findByClientId(SecurityContextUtil.getOAuthClientId());
			if (oAuthClient != null) {
				status.captchaSiteKey = oAuthClient.getPublicRecaptchaKey();
			}
		}
		status.smtpEnabled = StringUtils.isNotBlank(mailHost);
		return status;
	}

	public static class SystemStatus {
		public long userCount;
		public long speciesCount;
		public long accessionCount;
		public long geographyCount;
		public long inventoryCount;
		public String captchaSiteKey;
		public boolean smtpEnabled;
	}

}