automatic project update

This commit is contained in:
Julien Dubois 2016-04-20 16:20:32 +02:00
parent ed41ad9816
commit 915d253653
119 changed files with 1284 additions and 43514 deletions

View File

@ -24,8 +24,9 @@
"en"
],
"serverPort": 8080,
"jhipsterVersion": "3.0.0",
"jhipsterVersion": "3.1.0",
"enableSocialSignIn": false,
"useSass": false
"useSass": false,
"jhiPrefix": "jhi"
}
}

View File

@ -1,62 +1,54 @@
{
"version": "0.0.0",
"name": "sampleApplication",
"appPath": "src/main/webapp/",
"testPath": "src/test/javascript/spec",
"dependencies": {
"angular": "1.5.2",
"angular-aria": "1.5.2",
"angular-bootstrap": "1.2.5",
"angular-cache-buster": "0.4.3",
"angular-cookies": "1.5.2",
"angular-dynamic-locale": "0.1.30",
"angular-i18n": "1.5.2",
"ngstorage": "0.3.10",
"angular-loading-bar": "0.9.0",
"angular-resource": "1.5.2",
"angular-sanitize": "1.5.2",
"angular-translate": "2.11.0",
"angular-translate-interpolation-messageformat": "2.11.0",
"angular-translate-loader-partial": "2.11.0",
"angular-translate-storage-cookie": "2.11.0",
"angular-ui-router": "0.2.18",
"bootstrap": "3.3.6",
"bootstrap-ui-datetime-picker": "2.2.3",
"jquery": "2.2.2",
"json3": "3.3.2",
"modernizr": "3.3.1",
"ng-file-upload": "12.0.4",
"ngInfiniteScroll": "1.2.2",
"swagger-ui": "2.1.4"
},
"devDependencies": {
"angular-mocks": "1.5.2",
"angular-scenario": "1.5.2"
},
"overrides": {
"angular": {
"dependencies": {
"jquery": "2.2.2"
}
},
"bootstrap": {
"main": [
"dist/js/bootstrap.js",
"dist/css/bootstrap.css",
"less/bootstrap.less"
]
},
"messageformat": {
"main": [
"messageformat.js",
"locale/en.js"
]
}
},
"resolutions": {
"angular": "1.5.2",
"angular-cookies": "1.5.2",
"angular-bootstrap": "1.2.5",
"version": "0.0.0",
"name": "sample-application",
"appPath": "src/main/webapp/",
"testPath": "src/test/javascript/spec",
"dependencies": {
"angular": "1.5.2",
"angular-aria": "1.5.2",
"angular-bootstrap": "1.2.5",
"angular-cache-buster": "0.4.3",
"angular-cookies": "1.5.2",
"angular-dynamic-locale": "0.1.30",
"angular-i18n": "1.5.2",
"ngstorage": "0.3.10",
"angular-loading-bar": "0.9.0",
"angular-resource": "1.5.2",
"angular-sanitize": "1.5.2",
"angular-translate": "2.11.0",
"angular-translate-interpolation-messageformat": "2.11.0",
"angular-translate-loader-partial": "2.11.0",
"angular-translate-storage-cookie": "2.11.0",
"angular-ui-router": "0.2.18",
"bootstrap": "3.3.6",
"bootstrap-ui-datetime-picker": "2.3.1",
"jquery": "2.2.2",
"json3": "3.3.2",
"messageformat": "0.3.1",
"modernizr": "3.3.1",
"ng-file-upload": "12.0.4",
"ngInfiniteScroll": "1.2.2",
"swagger-ui": "2.1.4"
},
"devDependencies": {
"angular-mocks": "1.5.2"
},
"overrides": {
"angular" : {
"dependencies": {
"jquery": "2.2.2"
}
},
"bootstrap": {
"main": [
"dist/css/bootstrap.css"
]
}
},
"resolutions": {
"angular": "1.5.2",
"angular-cookies": "1.5.2",
"angular-bootstrap": "1.2.5",
"jquery": "2.2.2"
}
}

View File

@ -1,4 +1,4 @@
// Generated on 2016-03-23 using generator-jhipster 3.0.0
// Generated on 2016-04-20 using generator-jhipster 3.1.0
'use strict';
var gulp = require('gulp'),
@ -113,12 +113,7 @@ gulp.task('wiredep', ['wiredep:test', 'wiredep:app']);
gulp.task('wiredep:app', function () {
var stream = gulp.src(config.app + 'index.html')
.pipe(plumber({errorHandler: handleErrors}))
.pipe(wiredep({
exclude: [
/angular-i18n/, // localizations are loaded dynamically
'bower_components/bootstrap/dist/js/' // exclude bootstrap js files as we use ui-bootstrap
]
}))
.pipe(wiredep())
.pipe(gulp.dest(config.app));
return stream;
@ -128,11 +123,6 @@ gulp.task('wiredep:test', function () {
return gulp.src(config.test + 'karma.conf.js')
.pipe(plumber({errorHandler: handleErrors}))
.pipe(wiredep({
exclude: [
/angular-i18n/, // localizations are loaded dynamically
/angular-scenario/,
'bower_components/bootstrap/dist/js/' // exclude Bootstrap js files as we use ui-bootstrap
],
ignorePath: /\.\.\/\.\.\//, // remove ../../ from paths of injected JavaScript files
devDependencies: true,
fileTypes: {

View File

@ -7,16 +7,13 @@
"node_modules",
"src/main/webapp/bower_components"
],
"dependencies": {
"bower": "^1.6.3"
},
"devDependencies": {
"browser-sync": "2.11.2",
"del": "2.2.0",
"eslint-config-angular": "0.5.0",
"eslint-plugin-angular": "1.0.0",
"event-stream": "3.3.2",
"generator-jhipster": "3.0.0",
"generator-jhipster": "3.1.0",
"gulp": "3.9.1",
"gulp-angular-filesort": "1.1.1",
"gulp-angular-templatecache": "1.8.0",
@ -34,10 +31,10 @@
"gulp-ng-constant-fork": "0.4.1",
"gulp-notify": "2.2.0",
"gulp-plumber": "1.1.0",
"gulp-protractor": "2.1.0",
"gulp-protractor": "2.3.0",
"gulp-util": "3.0.7",
"gulp-rev": "7.0.0",
"gulp-rev-replace": "^0.4.3",
"gulp-rev-replace": "0.4.3",
"gulp-sourcemaps": "1.6.0",
"gulp-uglify": "1.5.3",
"gulp-useref": "3.0.7",
@ -53,9 +50,9 @@
"lazypipe": "1.0.1",
"lodash": "4.6.1",
"map-stream": "0.0.6",
"phantomjs-prebuilt": "2.1.4",
"protractor": "3.1.1",
"protractor-jasmine2-screenshot-reporter": "0.3.0",
"phantomjs-prebuilt": "2.1.7",
"protractor": "3.2.2",
"protractor-jasmine2-screenshot-reporter": "0.3.1",
"proxy-middleware": "0.15.0",
"run-sequence": "1.1.5",
"wiredep": "4.0.0",

View File

@ -75,6 +75,7 @@
<sonar.tests>${project.basedir}/src/test/</sonar.tests>
</properties>
<dependencies>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
@ -558,7 +559,7 @@
<driver></driver>
<url></url>
<defaultSchemaName></defaultSchemaName>
<username></username>
<username>sampleApplication</username>
<password></password>
<referenceUrl>hibernate:spring:com.mycompany.myapp.domain?dialect=&amp;hibernate.ejb.naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy</referenceUrl>
<verbose>true</verbose>
@ -599,7 +600,7 @@
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.1</version>
<version>0.4.5</version>
<configuration>
<imageName>sampleapplication</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
@ -743,9 +744,6 @@
<fileset>
<directory>target/www/</directory>
</fileset>
<fileset>
<directory>node_modules</directory>
</fileset>
</filesets>
</configuration>
</plugin>

View File

@ -1,10 +1,13 @@
FROM java:openjdk-8-jdk-alpine
FROM java:openjdk-8-jre-alpine
ENV JHIPSTER_SLEEP 0
# add directly the war
ADD *.war /app.war
RUN sh -c 'touch /app.war'
VOLUME /tmp
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]
EXPOSE 8080
CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \
sleep ${JHIPSTER_SLEEP} && \
java -Djava.security.egd=file:/dev/./urandom -jar /app.war

View File

@ -11,4 +11,4 @@ services:
- MYSQL_DATABASE=sampleapplication
ports:
- 3306:3306
command: mysqld --lower_case_table_names=1
command: mysqld --lower_case_table_names=1 --skip-ssl

View File

@ -207,6 +207,8 @@ public class JHipsterProperties {
private String licenseUrl;
private Boolean enabled;
public String getTitle() {
return title;
}
@ -278,6 +280,14 @@ public class JHipsterProperties {
public void setLicenseUrl(String licenseUrl) {
this.licenseUrl = licenseUrl;
}
public Boolean isEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
}
public static class Metrics {

View File

@ -3,6 +3,7 @@ package com.mycompany.myapp.config;
import ch.qos.logback.classic.AsyncAppender;
import ch.qos.logback.classic.LoggerContext;
import net.logstash.logback.appender.LogstashSocketAppender;
import net.logstash.logback.stacktrace.ShortenedThrowableConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@ -47,6 +48,13 @@ public class LoggingConfiguration {
logstashAppender.setSyslogHost(jHipsterProperties.getLogging().getLogstash().getHost());
logstashAppender.setPort(jHipsterProperties.getLogging().getLogstash().getPort());
logstashAppender.setCustomFields(customFields);
// Limit the maximum length of the forwarded stacktrace so that it won't exceed the 8KB UDP limit of logstash
ShortenedThrowableConverter throwableConverter = new ShortenedThrowableConverter();
throwableConverter.setMaxLength(7500);
throwableConverter.setRootCauseFirst(true);
logstashAppender.setThrowableConverter(throwableConverter);
logstashAppender.start();
// Wrap the appender in an Async appender for performance

View File

@ -7,6 +7,7 @@ import com.mycompany.myapp.web.filter.CachingHttpHeadersFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.MimeMappings;
@ -120,14 +121,14 @@ public class WebConfigurer implements ServletContextInitializer, EmbeddedServlet
}
@Bean
@ConditionalOnProperty(name = "jhipster.cors.allowed-origins")
public CorsFilter corsFilter() {
log.debug("Registering CORS filter");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = jHipsterProperties.getCors();
if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) {
source.registerCorsConfiguration("/api/**", config);
source.registerCorsConfiguration("/v2/api-docs", config);
source.registerCorsConfiguration("/oauth/**", config);
}
source.registerCorsConfiguration("/api/**", config);
source.registerCorsConfiguration("/v2/api-docs", config);
source.registerCorsConfiguration("/oauth/**", config);
return new CorsFilter(source);
}

View File

@ -6,7 +6,7 @@ import com.mycompany.myapp.config.JHipsterProperties;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.*;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
@ -28,7 +28,8 @@ import static springfox.documentation.builders.PathSelectors.regex;
*/
@Configuration
@EnableSwagger2
@ConditionalOnExpression("#{!environment.acceptsProfiles('" + Constants.SPRING_PROFILE_NO_SWAGGER + "') && !environment.acceptsProfiles('" + Constants.SPRING_PROFILE_PRODUCTION + "')}")
@Profile("!" + Constants.SPRING_PROFILE_NO_SWAGGER)
@ConditionalOnProperty(prefix="jhipster.swagger", name="enabled")
public class SwaggerConfiguration {
private final Logger log = LoggerFactory.getLogger(SwaggerConfiguration.class);

View File

@ -51,7 +51,7 @@ public class User extends AbstractAuditingEntity implements Serializable {
@NotNull
@Email
@Size(max = 100)
@Column(length = 100, unique = true)
@Column(length = 100, unique = true, nullable = false)
private String email;
@NotNull

View File

@ -30,6 +30,9 @@ import java.util.Locale;
public class MailService {
private final Logger log = LoggerFactory.getLogger(MailService.class);
private static final String USER = "user";
private static final String BASE_URL = "baseUrl";
@Inject
private JHipsterProperties jHipsterProperties;
@ -43,11 +46,6 @@ public class MailService {
@Inject
private SpringTemplateEngine templateEngine;
/**
* System default email address that sends the e-mails.
*/
private String from;
@Async
public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
log.debug("Send e-mail[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
@ -73,8 +71,8 @@ public class MailService {
log.debug("Sending activation e-mail to '{}'", user.getEmail());
Locale locale = Locale.forLanguageTag(user.getLangKey());
Context context = new Context(locale);
context.setVariable("user", user);
context.setVariable("baseUrl", baseUrl);
context.setVariable(USER, user);
context.setVariable(BASE_URL, baseUrl);
String content = templateEngine.process("activationEmail", context);
String subject = messageSource.getMessage("email.activation.title", null, locale);
sendEmail(user.getEmail(), subject, content, false, true);
@ -85,8 +83,8 @@ public class MailService {
log.debug("Sending creation e-mail to '{}'", user.getEmail());
Locale locale = Locale.forLanguageTag(user.getLangKey());
Context context = new Context(locale);
context.setVariable("user", user);
context.setVariable("baseUrl", baseUrl);
context.setVariable(USER, user);
context.setVariable(BASE_URL, baseUrl);
String content = templateEngine.process("creationEmail", context);
String subject = messageSource.getMessage("email.activation.title", null, locale);
sendEmail(user.getEmail(), subject, content, false, true);
@ -97,8 +95,8 @@ public class MailService {
log.debug("Sending password reset e-mail to '{}'", user.getEmail());
Locale locale = Locale.forLanguageTag(user.getLangKey());
Context context = new Context(locale);
context.setVariable("user", user);
context.setVariable("baseUrl", baseUrl);
context.setVariable(USER, user);
context.setVariable(BASE_URL, baseUrl);
String content = templateEngine.process("passwordResetEmail", context);
String subject = messageSource.getMessage("email.reset.title", null, locale);
sendEmail(user.getEmail(), subject, content, false, true);

View File

@ -10,6 +10,7 @@ import com.mycompany.myapp.security.SecurityUtils;
import com.mycompany.myapp.service.MailService;
import com.mycompany.myapp.service.UserService;
import com.mycompany.myapp.web.rest.dto.KeyAndPasswordDTO;
import com.mycompany.myapp.web.rest.dto.ManagedUserDTO;
import com.mycompany.myapp.web.rest.dto.UserDTO;
import com.mycompany.myapp.web.rest.util.HeaderUtil;
@ -53,7 +54,7 @@ public class AccountResource {
/**
* POST /register : register the user.
*
* @param userDTO the user DTO
* @param managedUserDTO the managed user DTO
* @param request the HTTP request
* @return the ResponseEntity with status 201 (Created) if the user is registred or 400 (Bad Request) if the login or e-mail is already in use
*/
@ -61,19 +62,19 @@ public class AccountResource {
method = RequestMethod.POST,
produces={MediaType.APPLICATION_JSON_VALUE, MediaType.TEXT_PLAIN_VALUE})
@Timed
public ResponseEntity<?> registerAccount(@Valid @RequestBody UserDTO userDTO, HttpServletRequest request) {
public ResponseEntity<?> registerAccount(@Valid @RequestBody ManagedUserDTO managedUserDTO, HttpServletRequest request) {
HttpHeaders textPlainHeaders = new HttpHeaders();
textPlainHeaders.setContentType(MediaType.TEXT_PLAIN);
return userRepository.findOneByLogin(userDTO.getLogin())
return userRepository.findOneByLogin(managedUserDTO.getLogin())
.map(user -> new ResponseEntity<>("login already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
.orElseGet(() -> userRepository.findOneByEmail(userDTO.getEmail())
.orElseGet(() -> userRepository.findOneByEmail(managedUserDTO.getEmail())
.map(user -> new ResponseEntity<>("e-mail address already in use", textPlainHeaders, HttpStatus.BAD_REQUEST))
.orElseGet(() -> {
User user = userService.createUserInformation(userDTO.getLogin(), userDTO.getPassword(),
userDTO.getFirstName(), userDTO.getLastName(), userDTO.getEmail().toLowerCase(),
userDTO.getLangKey());
User user = userService.createUserInformation(managedUserDTO.getLogin(), managedUserDTO.getPassword(),
managedUserDTO.getFirstName(), managedUserDTO.getLastName(), managedUserDTO.getEmail().toLowerCase(),
managedUserDTO.getLangKey());
String baseUrl = request.getScheme() + // "http"
"://" + // "://"
request.getServerName() + // "myhost"
@ -143,7 +144,7 @@ public class AccountResource {
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> saveAccount(@RequestBody UserDTO userDTO) {
public ResponseEntity<String> saveAccount(@Valid @RequestBody UserDTO userDTO) {
Optional<User> existingUser = userRepository.findOneByEmail(userDTO.getEmail());
if (existingUser.isPresent() && (!existingUser.get().getLogin().equalsIgnoreCase(userDTO.getLogin()))) {
return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("user-management", "emailexists", "Email already in use")).body(null);
@ -269,7 +270,7 @@ public class AccountResource {
private boolean checkPasswordLength(String password) {
return (!StringUtils.isEmpty(password) &&
password.length() >= UserDTO.PASSWORD_MIN_LENGTH &&
password.length() <= UserDTO.PASSWORD_MAX_LENGTH);
password.length() >= ManagedUserDTO.PASSWORD_MIN_LENGTH &&
password.length() <= ManagedUserDTO.PASSWORD_MAX_LENGTH);
}
}

View File

@ -2,13 +2,20 @@ package com.mycompany.myapp.web.rest.dto;
import java.time.ZonedDateTime;
import java.util.Set;
import com.mycompany.myapp.domain.User;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* A DTO extending the UserDTO, which is meant to be used in the user management UI.
*/
public class ManagedUserDTO extends UserDTO {
public static final int PASSWORD_MIN_LENGTH = 4;
public static final int PASSWORD_MAX_LENGTH = 100;
private Long id;
private ZonedDateTime createdDate;
@ -17,6 +24,10 @@ public class ManagedUserDTO extends UserDTO {
private ZonedDateTime lastModifiedDate;
@NotNull
@Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH)
private String password;
public ManagedUserDTO() {
}
@ -26,6 +37,17 @@ public class ManagedUserDTO extends UserDTO {
this.createdDate = user.getCreatedDate();
this.lastModifiedBy = user.getLastModifiedBy();
this.lastModifiedDate = user.getLastModifiedDate();
this.password = null;
}
public ManagedUserDTO(Long id, String login, String password, String firstName, String lastName,
String email, boolean activated, String langKey, Set<String> authorities , ZonedDateTime createdDate, String lastModifiedBy, ZonedDateTime lastModifiedDate ) {
super(login, firstName, lastName, email, activated, langKey, authorities);
this.id = id;
this.createdDate = createdDate;
this.lastModifiedBy = lastModifiedBy;
this.lastModifiedDate = lastModifiedDate;
this.password = password;
}
public Long getId() {
@ -60,6 +82,10 @@ public class ManagedUserDTO extends UserDTO {
this.lastModifiedDate = lastModifiedDate;
}
public String getPassword() {
return password;
}
@Override
public String toString() {
return "ManagedUserDTO{" +

View File

@ -13,18 +13,11 @@ import java.util.stream.Collectors;
*/
public class UserDTO {
public static final int PASSWORD_MIN_LENGTH = 4;
public static final int PASSWORD_MAX_LENGTH = 100;
@Pattern(regexp = "^[a-z0-9]*$")
@NotNull
@Size(min = 1, max = 50)
private String login;
@NotNull
@Size(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH)
private String password;
@Size(max = 50)
private String firstName;
@ -46,17 +39,16 @@ public class UserDTO {
}
public UserDTO(User user) {
this(user.getLogin(), null, user.getFirstName(), user.getLastName(),
this(user.getLogin(), user.getFirstName(), user.getLastName(),
user.getEmail(), user.getActivated(), user.getLangKey(),
user.getAuthorities().stream().map(Authority::getName)
.collect(Collectors.toSet()));
}
public UserDTO(String login, String password, String firstName, String lastName,
public UserDTO(String login, String firstName, String lastName,
String email, boolean activated, String langKey, Set<String> authorities) {
this.login = login;
this.password = password;
this.login = login;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
@ -65,10 +57,6 @@ public class UserDTO {
this.authorities = authorities;
}
public String getPassword() {
return password;
}
public String getLogin() {
return login;
}
@ -101,7 +89,6 @@ public class UserDTO {
public String toString() {
return "UserDTO{" +
"login='" + login + '\'' +
", password='" + password + '\'' +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +

View File

@ -28,6 +28,7 @@ public interface UserMapper {
@Mapping(target = "activationKey", ignore = true)
@Mapping(target = "resetKey", ignore = true)
@Mapping(target = "resetDate", ignore = true)
@Mapping(target = "password", ignore = true)
User userDTOToUser(UserDTO userDTO);
List<User> userDTOsToUsers(List<UserDTO> userDTOs);
@ -41,7 +42,7 @@ public interface UserMapper {
return user;
}
default Set<String> stringsFromAuthorities (Set < Authority > authorities) {
default Set<String> stringsFromAuthorities (Set<Authority> authorities) {
return authorities.stream().map(Authority::getName)
.collect(Collectors.toSet());
}

View File

@ -78,3 +78,5 @@ jhipster:
host: localhost
port: 5000
queueSize: 512
swagger: # swagger is enabled. It can be disabled by pasing 'no-swagger' profile at run time as well
enabled: true

View File

@ -88,3 +88,5 @@ jhipster:
host: localhost
port: 5000
queueSize: 512
swagger: # swagger is disabled. It can be disabled by pasing 'no-swagger' profile at run time as well
enabled: false

View File

@ -16,7 +16,7 @@
<!--
Added the entity BankAccount.
-->
<changeSet id="20150805124838" author="jhipster">
<changeSet id="20150805124838-1" author="jhipster">
<createTable tableName="bank_account">
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
<constraints primaryKey="true" nullable="false"/>
@ -33,11 +33,5 @@
<!-- jhipster-needle-liquibase-add-column - Jhipster will add columns here, do not remove-->
</createTable>
<addForeignKeyConstraint baseColumnNames="user_id"
baseTableName="bank_account"
constraintName="fk_bankaccount_user_id"
referencedColumnNames="id"
referencedTableName="jhi_user"/>
</changeSet>
</databaseChangeLog>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<!--
Added the constraints for entity BankAccount.
-->
<changeSet id="20150805124838-2" author="jhipster">
<addForeignKeyConstraint baseColumnNames="user_id"
baseTableName="bank_account"
constraintName="fk_bankaccount_user_id"
referencedColumnNames="id"
referencedTableName="jhi_user"/>
</changeSet>
</databaseChangeLog>

View File

@ -16,7 +16,7 @@
<!--
Added the entity Label.
-->
<changeSet id="20150805124936" author="jhipster">
<changeSet id="20150805124936-1" author="jhipster">
<createTable tableName="label">
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
<constraints primaryKey="true" nullable="false"/>

View File

@ -16,7 +16,7 @@
<!--
Added the entity Operation.
-->
<changeSet id="20150805125054" author="jhipster">
<changeSet id="20150805125054-1" author="jhipster">
<createTable tableName="operation">
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
<constraints primaryKey="true" nullable="false"/>
@ -38,11 +38,6 @@
</createTable>
<dropDefaultValue tableName="operation" columnName="date" columnDataType="datetime"/>
<addForeignKeyConstraint baseColumnNames="bank_account_id"
baseTableName="operation"
constraintName="fk_operation_bankaccount_id"
referencedColumnNames="id"
referencedTableName="bank_account"/>
<createTable tableName="operation_label">
<column name="labels_id" type="bigint">
<constraints nullable="false"/>
@ -53,18 +48,6 @@
</createTable>
<addPrimaryKey columnNames="operations_id, labels_id" tableName="operation_label"/>
<addForeignKeyConstraint baseColumnNames="operations_id"
baseTableName="operation_label"
constraintName="fk_operation_label_label_id"
referencedColumnNames="id"
referencedTableName="operation"/>
<addForeignKeyConstraint baseColumnNames="labels_id"
baseTableName="operation_label"
constraintName="fk_operation_label_operation_id"
referencedColumnNames="id"
referencedTableName="label"/>
</changeSet>
</databaseChangeLog>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<!--
Added the constraints for entity Operation.
-->
<changeSet id="20150805125054-2" author="jhipster">
<addForeignKeyConstraint baseColumnNames="bank_account_id"
baseTableName="operation"
constraintName="fk_operation_bankaccount_id"
referencedColumnNames="id"
referencedTableName="bank_account"/>
<addForeignKeyConstraint baseColumnNames="operations_id"
baseTableName="operation_label"
constraintName="fk_operation_label_label_id"
referencedColumnNames="id"
referencedTableName="operation"/>
<addForeignKeyConstraint baseColumnNames="labels_id"
baseTableName="operation_label"
constraintName="fk_operation_label_operation_id"
referencedColumnNames="id"
referencedTableName="label"/>
</changeSet>
</databaseChangeLog>

View File

@ -9,4 +9,7 @@
<include file="classpath:config/liquibase/changelog/20150805124936_added_entity_Label.xml" relativeToChangelogFile="false"/>
<include file="classpath:config/liquibase/changelog/20150805125054_added_entity_Operation.xml" relativeToChangelogFile="false"/>
<!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->
<include file="classpath:config/liquibase/changelog/20150805124838_added_entity_constraints_BankAccount.xml" relativeToChangelogFile="false"/>
<include file="classpath:config/liquibase/changelog/20150805125054_added_entity_constraints_Operation.xml" relativeToChangelogFile="false"/>
<!-- jhipster-needle-liquibase-add-constraints-changelog - JHipster will add liquibase constraints changelogs here -->
</databaseChangeLog>

View File

@ -4,7 +4,7 @@
<h1 translate="activate.title">Activation</h1>
<div class="alert alert-success" ng-show="vm.success" translate="activate.messages.success" translate-compile>
<strong>Your user has been activated.</strong> Please <a class="alert-link" href="" ng-click="vm.login">sign in</a>.
<strong>Your user has been activated.</strong> Please <a class="alert-link" href="" ng-click="vm.login()">sign in</a>.
</div>
<div class="alert alert-danger" ng-show="vm.error" translate="activate.messages.error">

View File

@ -19,7 +19,7 @@
<div class="form-group">
<label class="control-label" for="password" translate="global.form.newpassword">New password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="{{'global.form.newpassword.placeholder' | translate}}"
ng-model="vm.password" ng-minlength=5 ng-maxlength=50 required>
ng-model="vm.password" ng-minlength=4 ng-maxlength=50 required>
<div ng-show="form.password.$dirty && form.password.$invalid">
<p class="help-block"
ng-show="form.password.$error.required" translate="global.messages.validate.newpassword.required">
@ -27,7 +27,7 @@
</p>
<p class="help-block"
ng-show="form.password.$error.minlength" translate="global.messages.validate.newpassword.minlength">
Your password is required to be at least 5 characters.
Your password is required to be at least 4 characters.
</p>
<p class="help-block"
ng-show="form.password.$error.maxlength" translate="global.messages.validate.newpassword.maxlength">
@ -39,7 +39,7 @@
<div class="form-group">
<label class="control-label" for="confirmPassword" translate="global.form.confirmpassword">New password confirmation</label>
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="{{'global.form.confirmpassword.placeholder' | translate}}"
ng-model="vm.confirmPassword" ng-minlength=5 ng-maxlength=50 required>
ng-model="vm.confirmPassword" ng-minlength=4 ng-maxlength=50 required>
<div ng-show="form.confirmPassword.$dirty && form.confirmPassword.$invalid">
<p class="help-block"
ng-show="form.confirmPassword.$error.required" translate="global.messages.validate.confirmpassword.required">
@ -47,7 +47,7 @@
</p>
<p class="help-block"
ng-show="form.confirmPassword.$error.minlength" translate="global.messages.validate.confirmpassword.minlength">
Your confirmation password is required to be at least 5 characters.
Your confirmation password is required to be at least 4 characters.
</p>
<p class="help-block"
ng-show="form.confirmPassword.$error.maxlength" translate="global.messages.validate.confirmpassword.maxlength">

View File

@ -19,7 +19,7 @@
vm.registerAccount = {};
vm.success = null;
$timeout(function (){angular.element('[ng-model="vm.registerAccount.login"]').focus();});
$timeout(function (){angular.element('#login').focus();});
function register () {
if (vm.registerAccount.password !== vm.confirmPassword) {

View File

@ -75,7 +75,7 @@
<div class="form-group">
<label class="control-label" for="password" translate="global.form.newpassword">New password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="{{'global.form.newpassword.placeholder' | translate}}"
ng-model="vm.registerAccount.password" ng-minlength=5 ng-maxlength=50 required>
ng-model="vm.registerAccount.password" ng-minlength=4 ng-maxlength=50 required>
<div ng-show="form.password.$dirty && form.password.$invalid">
<p class="help-block"
ng-show="form.password.$error.required" translate="global.messages.validate.newpassword.required">
@ -83,7 +83,7 @@
</p>
<p class="help-block"
ng-show="form.password.$error.minlength" translate="global.messages.validate.newpassword.minlength">
Your password is required to be at least 5 characters.
Your password is required to be at least 4 characters.
</p>
<p class="help-block"
ng-show="form.password.$error.maxlength" translate="global.messages.validate.newpassword.maxlength">
@ -95,7 +95,7 @@
<div class="form-group">
<label class="control-label" for="confirmPassword" translate="global.form.confirmpassword">New password confirmation</label>
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="{{'global.form.confirmpassword.placeholder' | translate}}"
ng-model="vm.confirmPassword" ng-minlength=5 ng-maxlength=50 required>
ng-model="vm.confirmPassword" ng-minlength=4 ng-maxlength=50 required>
<div ng-show="form.confirmPassword.$dirty && form.confirmPassword.$invalid">
<p class="help-block"
ng-show="form.confirmPassword.$error.required" translate="global.messages.validate.confirmpassword.required">
@ -103,7 +103,7 @@
</p>
<p class="help-block"
ng-show="form.confirmPassword.$error.minlength" translate="global.messages.validate.confirmpassword.minlength">
Your confirmation password is required to be at least 5 characters.
Your confirmation password is required to be at least 4 characters.
</p>
<p class="help-block"
ng-show="form.confirmPassword.$error.maxlength" translate="global.messages.validate.confirmpassword.maxlength">
@ -116,7 +116,7 @@
</form>
<p></p>
<div class="alert alert-warning" translate="global.messages.info.authenticated" translate-compile>
If you want to <a class="alert-link" href="" ng-click="login()">sign in</a>, you can try the default accounts:<br/>- Administrator (login="admin" and password="admin") <br/>- User (login="user" and password="user").
If you want to <a class="alert-link" href="" ng-click="vm.login()">sign in</a>, you can try the default accounts:<br/>- Administrator (login="admin" and password="admin") <br/>- User (login="user" and password="user").
</div>
</div>
</div>

View File

@ -19,7 +19,7 @@
vm.resetAccount = {};
vm.success = null;
$timeout(function (){angular.element('[ng-model="vm.resetAccount.password"]').focus();});
$timeout(function (){angular.element('#password').focus();});
function finishReset() {
if (vm.resetAccount.password !== vm.confirmPassword) {

View File

@ -16,7 +16,7 @@
</div>
<div class="alert alert-success" ng-show="vm.success">
<p translate="reset.finish.messages.success" translate-compile><strong>Your password has been reset.</strong> Please <a class="alert-link" href="" ng-click="login">sign in</a>.</p>
<p translate="reset.finish.messages.success" translate-compile><strong>Your password has been reset.</strong> Please <a class="alert-link" href="" ng-click="vm.login()">sign in</a>.</p>
</div>
<div class="alert alert-danger" ng-show="vm.doNotMatch" translate="global.messages.error.dontmatch">
@ -28,7 +28,7 @@
<div class="form-group">
<label class="control-label" for="password" translate="global.form.newpassword">New password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="{{'global.form.newpassword.placeholder' | translate}}"
ng-model="vm.resetAccount.password" ng-minlength=5 ng-maxlength=50 required>
ng-model="vm.resetAccount.password" ng-minlength=4 ng-maxlength=50 required>
<div ng-show="form.password.$dirty && form.password.$invalid">
<p class="help-block"
ng-show="form.password.$error.required" translate="global.messages.validate.newpassword.required">
@ -36,7 +36,7 @@
</p>
<p class="help-block"
ng-show="form.password.$error.minlength" translate="global.messages.validate.newpassword.minlength">
Your password is required to be at least 5 characters.
Your password is required to be at least 4 characters.
</p>
<p class="help-block"
ng-show="form.password.$error.maxlength" translate="global.messages.validate.newpassword.maxlength">
@ -49,7 +49,7 @@
<div class="form-group">
<label class="control-label" for="confirmPassword" translate="global.form.confirmpassword">New password confirmation</label>
<input type="password" class="form-control" id="confirmPassword" name="confirmPassword" placeholder="{{'global.form.confirmpassword.placeholder' | translate}}"
ng-model="vm.confirmPassword" ng-minlength=5 ng-maxlength=50 required>
ng-model="vm.confirmPassword" ng-minlength=4 ng-maxlength=50 required>
<div ng-show="form.confirmPassword.$dirty && form.confirmPassword.$invalid">
<p class="help-block"
ng-show="form.confirmPassword.$error.required" translate="global.messages.validate.confirmpassword.required">
@ -57,7 +57,7 @@
</p>
<p class="help-block"
ng-show="form.confirmPassword.$error.minlength" translate="global.messages.validate.confirmpassword.minlength">
Your password confirmation is required to be at least 5 characters.
Your password confirmation is required to be at least 4 characters.
</p>
<p class="help-block"
ng-show="form.confirmPassword.$error.maxlength" translate="global.messages.validate.confirmpassword.maxlength">

View File

@ -16,7 +16,7 @@
vm.resetAccount = {};
vm.success = null;
$timeout(function (){angular.element('[ng-model="resetAccount.email"]').focus();});
$timeout(function (){angular.element('#email').focus();});
function requestReset () {

View File

@ -1,5 +1,4 @@
<div>
<h2 translate="sessions.title" translate-values="{username: '{{vm.account.login}}'}">Active sessions for [<b>{{vm.account.login}}</b>]</h2>
<div class="alert alert-success" ng-show="vm.success" translate="sessions.messages.success">

View File

@ -36,6 +36,6 @@
</table>
<div class="text-center">
<uib-pagination class="pagination-sm" total-items="vm.totalItems" ng-model="vm.page" ng-change="vm.loadPage(page)"></uib-pagination>
<uib-pagination class="pagination-sm" total-items="vm.totalItems" ng-model="vm.page" ng-change="vm.loadPage(vm.page)"></uib-pagination>
</div>
</div>

View File

@ -1,5 +1,4 @@
<div>
<h2 translate="health.title">Health Checks</h2>
<p>

View File

@ -1,11 +1,11 @@
<div>
<div class="table-responsive">
<h2 translate="logs.title">Logs</h2>
<p translate="logs.nbloggers" translate-values="{total: '{{ vm.loggers.length }}'}">There are {{ vm.loggers.length }} loggers.</p>
<span translate="logs.filter">Filter</span> <input type="text" ng-model="filter" class="form-control">
<table class="table table-condensed table-striped table-bordered table-responsive">
<table class="table table-condensed table-striped table-bordered">
<thead>
<tr title="click to order">
<th ng-click="predicate = 'name'; reverse=!reverse"><span translate="logs.table.name">Name</span></th>

View File

@ -1,239 +1,237 @@
<div>
<h2 translate="metrics.title">Application Metrics</h2>
<p>
<button type="button" class="btn btn-primary" ng-click="vm.refresh()"><span class="glyphicon glyphicon-refresh"></span>&nbsp;<span translate="metrics.refresh.button">Refresh</span></button>
</p>
<h2 translate="metrics.title">Application Metrics</h2>
<p>
<button type="button" class="btn btn-primary" ng-click="vm.refresh()"><span class="glyphicon glyphicon-refresh"></span>&nbsp;<span translate="metrics.refresh.button">Refresh</span></button>
</p>
<h3 translate="metrics.jvm.title">JVM Metrics</h3>
<div class="row" ng-hide="vm.updatingMetrics">
<div class="col-md-4">
<b translate="metrics.jvm.memory.title">Memory</b>
<p><span translate="metrics.jvm.memory.total">Total Memory</span> ({{vm.metrics.gauges['jvm.memory.total.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.total.max'].value / 1000000 | number:0}}M)</p>
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.total.max'].value" value="vm.metrics.gauges['jvm.memory.total.used'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.memory.total.used'].value * 100 / vm.metrics.gauges['jvm.memory.total.max'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.memory.heap">Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.heap.max'].value / 1000000 | number:0}}M)</p>
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.heap.max'].value" value="vm.metrics.gauges['jvm.memory.heap.used'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.memory.heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.heap.max'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.memory.nonheap">Non-Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.non-heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.non-heap.committed'].value / 1000000 | number:0}}M)</p>
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.non-heap.committed'].value" value="vm.metrics.gauges['jvm.memory.non-heap.used'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.memory.non-heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.non-heap.committed'].value | number:0}}%</span>
</uib-progressbar>
</div>
<div class="col-md-4">
<b translate="metrics.jvm.threads.title">Threads</b> (Total: {{vm.metrics.gauges['jvm.threads.count'].value}}) <a class="hand" ng-click="vm.refreshThreadDumpData()" data-toggle="modal" data-target="#threadDump"><i class="glyphicon glyphicon-eye-open"></i></a>
<p><span translate="metrics.jvm.threads.runnable">Runnable</span> {{vm.metrics.gauges['jvm.threads.runnable.count'].value}}</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.runnable.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.threads.runnable.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.threads.timedwaiting">Timed Waiting</span> ({{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value}})</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.timed_waiting.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="warning">
<span>{{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.threads.waiting">Waiting</span> ({{vm.metrics.gauges['jvm.threads.waiting.count'].value}})</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.waiting.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="warning">
<span>{{vm.metrics.gauges['jvm.threads.waiting.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.threads.blocked">Blocked</span> ({{vm.metrics.gauges['jvm.threads.blocked.count'].value}})</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.blocked.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.threads.blocked.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
</div>
<div class="col-md-4">
<b translate="metrics.jvm.gc.title">Garbage collections</b>
<div class="row">
<div class="col-md-9" translate="metrics.jvm.gc.marksweepcount">Mark Sweep count</div>
<div class="col-md-3 text-right">{{vm.metrics.gauges['jvm.garbage.PS-MarkSweep.count'].value}}</div>
<h3 translate="metrics.jvm.title">JVM Metrics</h3>
<div class="row" ng-hide="vm.updatingMetrics">
<div class="col-md-4">
<b translate="metrics.jvm.memory.title">Memory</b>
<p><span translate="metrics.jvm.memory.total">Total Memory</span> ({{vm.metrics.gauges['jvm.memory.total.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.total.max'].value / 1000000 | number:0}}M)</p>
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.total.max'].value" value="vm.metrics.gauges['jvm.memory.total.used'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.memory.total.used'].value * 100 / vm.metrics.gauges['jvm.memory.total.max'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.memory.heap">Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.heap.max'].value / 1000000 | number:0}}M)</p>
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.heap.max'].value" value="vm.metrics.gauges['jvm.memory.heap.used'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.memory.heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.heap.max'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.memory.nonheap">Non-Heap Memory</span> ({{vm.metrics.gauges['jvm.memory.non-heap.used'].value / 1000000 | number:0}}M / {{vm.metrics.gauges['jvm.memory.non-heap.committed'].value / 1000000 | number:0}}M)</p>
<uib-progressbar min="0" max="vm.metrics.gauges['jvm.memory.non-heap.committed'].value" value="vm.metrics.gauges['jvm.memory.non-heap.used'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.memory.non-heap.used'].value * 100 / vm.metrics.gauges['jvm.memory.non-heap.committed'].value | number:0}}%</span>
</uib-progressbar>
</div>
<div class="row">
<div class="col-md-9" translate="metrics.jvm.gc.marksweeptime">Mark Sweep time</div>
<div class="col-md-3 text-right">{{vm.metrics.gauges['jvm.garbage.PS-MarkSweep.time'].value}}ms</div>
<div class="col-md-4">
<b translate="metrics.jvm.threads.title">Threads</b> (Total: {{vm.metrics.gauges['jvm.threads.count'].value}}) <a class="hand" ng-click="vm.refreshThreadDumpData()" data-toggle="modal" data-target="#threadDump"><i class="glyphicon glyphicon-eye-open"></i></a>
<p><span translate="metrics.jvm.threads.runnable">Runnable</span> {{vm.metrics.gauges['jvm.threads.runnable.count'].value}}</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.runnable.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.threads.runnable.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.threads.timedwaiting">Timed Waiting</span> ({{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value}})</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.timed_waiting.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="warning">
<span>{{vm.metrics.gauges['jvm.threads.timed_waiting.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.threads.waiting">Waiting</span> ({{vm.metrics.gauges['jvm.threads.waiting.count'].value}})</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.waiting.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="warning">
<span>{{vm.metrics.gauges['jvm.threads.waiting.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
<p><span translate="metrics.jvm.threads.blocked">Blocked</span> ({{vm.metrics.gauges['jvm.threads.blocked.count'].value}})</p>
<uib-progressbar min="0" value="vm.metrics.gauges['jvm.threads.blocked.count'].value" max="vm.metrics.gauges['jvm.threads.count'].value" class="progress-striped active" type="success">
<span>{{vm.metrics.gauges['jvm.threads.blocked.count'].value * 100 / vm.metrics.gauges['jvm.threads.count'].value | number:0}}%</span>
</uib-progressbar>
</div>
<div class="row">
<div class="col-md-9" translate="metrics.jvm.gc.scavengecount">Scavenge count</div>
<div class="col-md-3 text-right">{{vm.metrics