diff --git a/README.md b/README.md index 75dafe1..57c6a43 100644 --- a/README.md +++ b/README.md @@ -43,4 +43,6 @@ Download options : https://kafkawize.readthedocs.io/en/latest/getting_started.ht  - \ No newline at end of file + + + \ No newline at end of file diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 33f3544..ce3f7e3 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,8 +1,8 @@ -Kafkawize 3.3 +Kafkawize 3.4 Kafkawize is a Kafka Topic management tool (A Web application) which automates the process of creating and browsing Kafka components, by introducing roles/authorizations to users of various teams of an organization Changes include -1. Decline Topic requests -2. Decline Acl requests -3. Bug fix in creating topic request \ No newline at end of file +1. New page (Admin-ServerConfig) to display server configuration - application properties +2. Default replication factor, default partitions and default max partitions can be configured from Clusters page. +3. Couple of minor bug fixes \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6f943da..f302aa2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.kafkamgt.uiapi kafkawize - 3.3 + 3.4 jar @@ -102,7 +102,12 @@ org.projectlombok lombok 1.18.10 - provided + + + + org.apache.commons + commons-text + 1.8 diff --git a/screenshots/AddCluster.JPG b/screenshots/AddCluster.JPG index 1e45786..ef37d94 100644 Binary files a/screenshots/AddCluster.JPG and b/screenshots/AddCluster.JPG differ diff --git a/screenshots/Environments.JPG b/screenshots/Environments.JPG index c605cad..cc2d3a9 100644 Binary files a/screenshots/Environments.JPG and b/screenshots/Environments.JPG differ diff --git a/screenshots/RequestTopic.JPG b/screenshots/RequestTopic.JPG index b18aa12..f6250e0 100644 Binary files a/screenshots/RequestTopic.JPG and b/screenshots/RequestTopic.JPG differ diff --git a/screenshots/ServerConfig.JPG b/screenshots/ServerConfig.JPG new file mode 100644 index 0000000..92ae106 Binary files /dev/null and b/screenshots/ServerConfig.JPG differ diff --git a/src/main/java/com/kafkamgt/uiapi/controller/ServerConfigController.java b/src/main/java/com/kafkamgt/uiapi/controller/ServerConfigController.java new file mode 100644 index 0000000..011ac46 --- /dev/null +++ b/src/main/java/com/kafkamgt/uiapi/controller/ServerConfigController.java @@ -0,0 +1,27 @@ +package com.kafkamgt.uiapi.controller; + +import com.kafkamgt.uiapi.dao.ServerConfigProperties; +import com.kafkamgt.uiapi.service.ServerConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/") +public class ServerConfigController { + + @Autowired + private ServerConfigService serverConfigService; + + @RequestMapping(value = "/getAllServerConfig", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity> getAllProperties() { + return new ResponseEntity<>(serverConfigService.getAllProps(), HttpStatus.OK); + } + +} diff --git a/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java b/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java index 0aaccc0..11810bb 100644 --- a/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java +++ b/src/main/java/com/kafkamgt/uiapi/controller/TopicController.java @@ -56,7 +56,7 @@ public ResponseEntity> getTopicRequests() { @RequestMapping(value = "/getTopicTeam", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity getTopicTeam(@RequestParam("topicName") String topicName, - @RequestParam("env") String env) { + @RequestParam("env") String env) { return new ResponseEntity<>(topicControllerService.getTopicTeam(topicName, env), HttpStatus.OK); } @@ -100,7 +100,7 @@ public ResponseEntity> getTopicsOnly(@RequestParam("env") String en @RequestMapping(value = "/getSyncTopics", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity> getSyncTopics(@RequestParam("env") String env, @RequestParam("pageNo") String pageNo, - @RequestParam(value="topicnamesearch",required=false) String topicNameSearch) throws Exception { + @RequestParam(value="topicnamesearch",required=false) String topicNameSearch) throws Exception { return new ResponseEntity<>(topicControllerService.getSyncTopics(env, pageNo, topicNameSearch), HttpStatus.OK); } diff --git a/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java b/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java index 805afb5..0117aae 100644 --- a/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java +++ b/src/main/java/com/kafkamgt/uiapi/controller/UiControllerLogin.java @@ -138,6 +138,11 @@ public String browseAcls(ModelMap model) { return "browseAcls.html"; } + @RequestMapping(value = "/serverConfig", method = RequestMethod.GET) + public String serverConfig(ModelMap model) { + return "serverConfig.html"; + } + @RequestMapping(value = "/notFound", method = RequestMethod.GET) public String notFound(ModelMap model) { return "index.html"; diff --git a/src/main/java/com/kafkamgt/uiapi/dao/Env.java b/src/main/java/com/kafkamgt/uiapi/dao/Env.java index d04f5a2..27f5d8a 100644 --- a/src/main/java/com/kafkamgt/uiapi/dao/Env.java +++ b/src/main/java/com/kafkamgt/uiapi/dao/Env.java @@ -4,7 +4,10 @@ import lombok.Getter; import lombok.Setter; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; import java.io.Serializable; @Getter @@ -43,4 +46,9 @@ public class Env implements Serializable { @Column(name = "truststorepwd") private String trustStorePwd; + + @Column(name = "other_params") + private String otherParams; + + } diff --git a/src/main/java/com/kafkamgt/uiapi/dao/ServerConfigProperties.java b/src/main/java/com/kafkamgt/uiapi/dao/ServerConfigProperties.java new file mode 100644 index 0000000..1fb7769 --- /dev/null +++ b/src/main/java/com/kafkamgt/uiapi/dao/ServerConfigProperties.java @@ -0,0 +1,15 @@ +package com.kafkamgt.uiapi.dao; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ServerConfigProperties { + + private String id; + + private String key; + + private String value; +} diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java b/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java index 7485e7c..4367ae9 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/HandleDbRequests.java @@ -1,9 +1,7 @@ package com.kafkamgt.uiapi.helpers; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.model.PCStream; -import com.kafkamgt.uiapi.dao.UserInfo; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/CassandraDataSourceCondition.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/CassandraDataSourceCondition.java index a4b0f77..25a50be 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/CassandraDataSourceCondition.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/CassandraDataSourceCondition.java @@ -13,7 +13,7 @@ public class CassandraDataSourceCondition implements Condition { public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { Environment defaultEnv = conditionContext.getEnvironment(); - if(defaultEnv.getProperty("db.storetype").equals("cassandra")) + if(defaultEnv.getProperty("custom.db.storetype").equals("cassandra")) return true; else return false; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java index f4f9a05..31b9194 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/DeleteData.java @@ -1,15 +1,20 @@ package com.kafkamgt.uiapi.helpers.db.cassandra; -import com.datastax.driver.core.*; -import com.datastax.driver.core.querybuilder.*; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.Clause; +import com.datastax.driver.core.querybuilder.Delete; +import com.datastax.driver.core.querybuilder.QueryBuilder; +import com.datastax.driver.core.querybuilder.Select; import com.kafkamgt.uiapi.dao.Acl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.util.*; +import java.util.List; @Component public class DeleteData { @@ -18,7 +23,7 @@ public class DeleteData { Session session; - @Value("${cassandradb.keyspace:@null}") + @Value("${custom.cassandradb.keyspace:@null}") String keyspace; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java index dfc01e0..2a2c940 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/HandleDbRequestsCassandra.java @@ -6,10 +6,8 @@ import com.datastax.driver.core.policies.DefaultRetryPolicy; import com.datastax.driver.extras.codecs.jdk8.InstantCodec; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.helpers.HandleDbRequests; import com.kafkamgt.uiapi.model.PCStream; -import com.kafkamgt.uiapi.dao.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -43,13 +41,13 @@ public class HandleDbRequestsCassandra implements HandleDbRequests { Cluster cluster; Session session; - @Value("${cassandradb.url:@null}") + @Value("${custom.cassandradb.url:@null}") String clusterConnHost; - @Value("${cassandradb.port:9042}") + @Value("${custom.cassandradb.port:9042}") int clusterConnPort; - @Value("${cassandradb.keyspace:@null}") + @Value("${custom.cassandradb.keyspace:@null}") String keyspace; public void connectToDb() { diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java index 571ffe2..dd3ad64 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/InsertData.java @@ -1,18 +1,18 @@ package com.kafkamgt.uiapi.helpers.db.cassandra; -import com.datastax.driver.core.*; +import com.datastax.driver.core.BoundStatement; +import com.datastax.driver.core.PreparedStatement; +import com.datastax.driver.core.Session; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.Topic; -import com.kafkamgt.uiapi.dao.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.util.*; - -import static org.springframework.beans.BeanUtils.copyProperties; +import java.util.Date; +import java.util.List; +import java.util.Random; @Component public class InsertData { @@ -21,7 +21,7 @@ public class InsertData { Session session; - @Value("${cassandradb.keyspace:@null}") + @Value("${custom.cassandradb.keyspace:@null}") String keyspace; SelectData cassandraSelectHelper; @@ -247,13 +247,13 @@ public String insertIntoTeams(Team team){ public String insertIntoEnvs(Env env){ String tableName = "env"; String insertstat = "INSERT INTO " + keyspace + "."+tableName+"(name, host, port, protocol, type," + - " keystorelocation, truststorelocation, keystorepwd, keypwd, truststorepwd ) " + - "VALUES (?,?,?,?,?,?,?,?,?,?);"; + " keystorelocation, truststorelocation, keystorepwd, keypwd, truststorepwd, other_params ) " + + "VALUES (?,?,?,?,?,?,?,?,?,?,?);"; PreparedStatement statement = session.prepare(insertstat); BoundStatement boundStatement = new BoundStatement(statement); session.execute(boundStatement.bind(env.getName(),env.getHost(),env.getPort(),env.getProtocol(),env.getType() ,env.getKeyStoreLocation(),env.getTrustStoreLocation(),env.getKeyStorePwd(), - env.getKeyPwd(),env.getTrustStorePwd())); + env.getKeyPwd(),env.getTrustStorePwd(), env.getOtherParams())); return "success"; } diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/SelectData.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/SelectData.java index 4f47701..4dc0e30 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/SelectData.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/SelectData.java @@ -1,18 +1,24 @@ package com.kafkamgt.uiapi.helpers.db.cassandra; -import com.datastax.driver.core.*; -import com.datastax.driver.core.querybuilder.*; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.Clause; +import com.datastax.driver.core.querybuilder.Ordering; +import com.datastax.driver.core.querybuilder.QueryBuilder; +import com.datastax.driver.core.querybuilder.Select; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.model.PCStream; -import com.kafkamgt.uiapi.dao.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Component @@ -22,7 +28,7 @@ public class SelectData{ Session session; - @Value("${cassandradb.keyspace:@null}") + @Value("${custom.cassandradb.keyspace:@null}") String keyspace; @@ -527,6 +533,7 @@ public List selectAllEnvs(String type){ env.setKeyStorePwd(row.getString("keystorepwd")); env.setKeyPwd(row.getString("keypwd")); env.setTrustStorePwd(row.getString("truststorepwd")); + env.setOtherParams(row.getString("other_params")); if(row.getString("type").equals(type)) envList.add(env); @@ -557,7 +564,7 @@ public Env selectEnvDetails(String environment){ env.setKeyStorePwd(row.getString("keystorepwd")); env.setKeyPwd(row.getString("keypwd")); env.setTrustStorePwd(row.getString("truststorepwd")); - + env.setOtherParams(row.getString("other_params")); } return env; } diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/UpdateData.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/UpdateData.java index 57a40bc..23b2872 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/UpdateData.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/cassandra/UpdateData.java @@ -1,8 +1,10 @@ package com.kafkamgt.uiapi.helpers.db.cassandra; -import com.datastax.driver.core.*; -import com.datastax.driver.core.querybuilder.*; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.Clause; +import com.datastax.driver.core.querybuilder.QueryBuilder; +import com.datastax.driver.core.querybuilder.Update; import com.kafkamgt.uiapi.dao.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,7 +12,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import static org.springframework.beans.BeanUtils.copyProperties; @@ -21,7 +25,7 @@ public class UpdateData { Session session; - @Value("${cassandradb.keyspace:@null}") + @Value("${custom.cassandradb.keyspace:@null}") String keyspace; @Autowired diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java index f881976..c80e290 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/DeleteDataJdbc.java @@ -7,7 +7,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Component; import java.util.List; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java index 2b4f702..35b9c2e 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/HandleDbRequestsJdbc.java @@ -1,10 +1,8 @@ package com.kafkamgt.uiapi.helpers.db.rdbms; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.helpers.HandleDbRequests; import com.kafkamgt.uiapi.model.PCStream; -import com.kafkamgt.uiapi.dao.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/InsertDataJdbc.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/InsertDataJdbc.java index 7031702..7ce80a2 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/InsertDataJdbc.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/InsertDataJdbc.java @@ -1,8 +1,6 @@ package com.kafkamgt.uiapi.helpers.db.rdbms; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.Topic; -import com.kafkamgt.uiapi.dao.UserInfo; import com.kafkamgt.uiapi.repository.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/JdbcDataSourceCondition.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/JdbcDataSourceCondition.java index 2d0b7fe..49f2304 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/JdbcDataSourceCondition.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/JdbcDataSourceCondition.java @@ -13,7 +13,7 @@ public class JdbcDataSourceCondition implements Condition { public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { Environment defaultEnv = conditionContext.getEnvironment(); - if(defaultEnv.getProperty("db.storetype").equals("rdbms")) + if(defaultEnv.getProperty("custom.db.storetype").equals("rdbms")) return true; else return false; diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/SelectDataJdbc.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/SelectDataJdbc.java index ae43864..9317d20 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/SelectDataJdbc.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/SelectDataJdbc.java @@ -2,8 +2,6 @@ import com.google.common.collect.Lists; import com.kafkamgt.uiapi.dao.*; -import com.kafkamgt.uiapi.dao.UserInfo; -import com.kafkamgt.uiapi.dao.Topic; import com.kafkamgt.uiapi.model.PCStream; import com.kafkamgt.uiapi.repository.*; import org.slf4j.Logger; @@ -11,7 +9,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Component @@ -266,7 +267,6 @@ public List selectActivityLog(String username, String env){ return activityList; } - public List selectTeamsOfUsers(String username){ List teamList = new ArrayList(); diff --git a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/UpdateDataJdbc.java b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/UpdateDataJdbc.java index 390aefe..1caf7af 100644 --- a/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/UpdateDataJdbc.java +++ b/src/main/java/com/kafkamgt/uiapi/helpers/db/rdbms/UpdateDataJdbc.java @@ -5,7 +5,6 @@ import com.kafkamgt.uiapi.repository.SchemaRequestRepo; import com.kafkamgt.uiapi.repository.TopicRequestsRepo; import com.kafkamgt.uiapi.repository.UserInfoRepo; -import com.kafkamgt.uiapi.dao.UserInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java b/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java index 2c12bd3..77b02cb 100644 --- a/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java +++ b/src/main/java/com/kafkamgt/uiapi/service/ClusterApiService.java @@ -26,13 +26,13 @@ public class ClusterApiService { @Autowired ManageTopics createTopicHelper; - @Value("${clusterapi.url}") + @Value("${custom.clusterapi.url}") String clusterConnUrl; - @Value("${clusterapi.username}") + @Value("${custom.clusterapi.username}") String clusterApiUser; - @Value("${clusterapi.password}") + @Value("${custom.clusterapi.password}") String clusterApiPwd; private String uriCreateAcls = "/topics/createAcls"; diff --git a/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java b/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java index 0f75a8e..88e5fd1 100644 --- a/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java +++ b/src/main/java/com/kafkamgt/uiapi/service/ManageTopics.java @@ -19,7 +19,7 @@ @Configuration public class ManageTopics { - @Value("${db.storetype}") + @Value("${custom.db.storetype}") String dbStore; HandleDbRequests handleDbRequests; diff --git a/src/main/java/com/kafkamgt/uiapi/service/ServerConfigService.java b/src/main/java/com/kafkamgt/uiapi/service/ServerConfigService.java new file mode 100644 index 0000000..3e559af --- /dev/null +++ b/src/main/java/com/kafkamgt/uiapi/service/ServerConfigService.java @@ -0,0 +1,86 @@ +package com.kafkamgt.uiapi.service; + + +import com.kafkamgt.uiapi.dao.ServerConfigProperties; +import org.apache.commons.text.WordUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.EnumerablePropertySource; +import org.springframework.core.env.Environment; +import org.springframework.core.env.PropertySource; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; + +@Service +public class ServerConfigService { + + private static Logger LOG = LoggerFactory.getLogger(ServerConfigService.class); + + @Autowired + Environment env; + + private static List listProps; + + @PostConstruct + private void getAllProperties() { + LOG.info("All server properties loaded"); + + List listProps = new ArrayList<>(); + WordUtils wr; + + if (env instanceof ConfigurableEnvironment) { + for (PropertySource propertySource : ((ConfigurableEnvironment) env).getPropertySources()) { + if (propertySource instanceof EnumerablePropertySource) { + for (String key : ((EnumerablePropertySource) propertySource).getPropertyNames()) { + + ServerConfigProperties props = new ServerConfigProperties(); + props.setKey(key); + if(key.contains("password")) + props.setValue("*******"); + else + props.setValue(WordUtils.wrap(propertySource.getProperty(key)+"",125,"\n",true)); + + if(!checkPropertyExists(listProps,key)) + listProps.add(props); + } + } + } + } + this.listProps = listProps; + + } + + public List getAllProps(){ + return this.listProps; + } + + public String updateProperty(ServerConfigProperties serverProps){ + String execRes = "success"; + String key = null, value = null; + + for(ServerConfigProperties serverProp: listProps){ + if(serverProps.getId().equals(serverProps.getId())) + { + key = serverProp.getKey(); + value = serverProps.getValue(); + } + } + + return "{\"result\":\""+execRes+"\"}"; + } + + private boolean checkPropertyExists(List props, String key){ + for(ServerConfigProperties serverProps: props){ + if(serverProps.getKey().equals(key)) + return true; + } + return false; + } + + +} \ No newline at end of file diff --git a/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java b/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java index d980e12..8f89d49 100644 --- a/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java +++ b/src/main/java/com/kafkamgt/uiapi/service/TopicControllerService.java @@ -29,13 +29,13 @@ public class TopicControllerService { @Autowired ClusterApiService clusterApiService; - @Value("${clusterapi.url}") + @Value("${custom.clusterapi.url}") private String clusterConnUrl; - @Value("${clusterapi.username}") + @Value("${custom.clusterapi.username}") private String clusterApiUser; - @Value("${clusterapi.password}") + @Value("${custom.clusterapi.password}") private String clusterApiPwd; String uriGetTopics = "/topics/getTopics/"; @@ -57,10 +57,25 @@ public String createTopics(TopicRequest topicRequestReq) { String topicPartitions = topicRequestReq.getTopicpartitions(); int topicPartitionsInt; String envSelected = topicRequestReq.getEnvironment(); - String defPartns = springEnvProps.getProperty("kafka." + envSelected + ".default.partitions"); - String defMaxPartns = springEnvProps.getProperty("kafka." + envSelected + ".default.maxpartitions"); - String defaultRf = springEnvProps.getProperty("kafka." + envSelected + ".default.replicationfactor"); + Env env = manageTopics.selectEnvDetails(envSelected); + String otherParams = env.getOtherParams(); + String params[] ; + String defPartns = null, defMaxPartns = null, defaultRf = null; + + try{ + if(otherParams!=null) { + params = otherParams.split(","); + + if(params!=null && params.length==3) { + defPartns = (params[0]).split("=")[1]; + defMaxPartns = (params[1]).split("=")[1]; + defaultRf = (params[2]).split("=")[1]; + } + } + }catch (Exception e){ + LOG.error("Unable to set topic partitions, setting default from properties."); + } if(defPartns==null) defPartns="1"; diff --git a/src/main/java/com/kafkamgt/uiapi/service/UtilControllerService.java b/src/main/java/com/kafkamgt/uiapi/service/UtilControllerService.java index 5e7dc93..2d4efb7 100644 --- a/src/main/java/com/kafkamgt/uiapi/service/UtilControllerService.java +++ b/src/main/java/com/kafkamgt/uiapi/service/UtilControllerService.java @@ -24,16 +24,16 @@ public class UtilControllerService { @Autowired ManageTopics createTopicHelper; - @Value("${clusterapi.url}") + @Value("${custom.clusterapi.url}") String clusterConnUrl; - @Value("${clusterapi.username}") + @Value("${custom.clusterapi.username}") String clusterApiUser; - @Value("${clusterapi.password}") + @Value("${custom.clusterapi.password}") String clusterApiPwd; - @Value("${app.company.name}") + @Value("${custom.app.company.name}") String companyInfo; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 62442a1..48b5b5d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,31 +2,21 @@ server.port:9097 server.servlet.context-path=/kafkawize -# db.storetype should be "cassandra" or "rdbms" -db.storetype=cassandra +# custom.db.storetype should be "cassandra" or "rdbms" +custom.db.storetype=cassandra # cluster api properties -clusterapi.url:http://localhost:9343 -clusterapi.username:user1 -clusterapi.password:pwd +custom.clusterapi.url:http://localhost:9343 +custom.clusterapi.username:user1 +custom.clusterapi.password:pwd -# db store cassandra properties, to be filled in if db.storetype is cassandra -cassandradb.keyspace:kafkamanagementapi -cassandradb.url:localhost -cassandradb.port:9042 - -# if cluster being created is DEV, you can set max partitions for that environment here -kafka.DEV.default.partitions:1 -kafka.DEV.default.maxpartitions:4 -kafka.DEV.default.replicationfactor:1 - -# if cluster being created is TST, you can set max partitions for that environment here -kafka.TST.default.partitions:2 -kafka.TST.default.maxpartitions:4 -kafka.TST.default.replicationfactor:1 +# db store cassandra properties, to be filled in if custom.db.storetype is cassandra +custom.cassandradb.keyspace:kafkamanagementapi +custom.cassandradb.url:localhost +custom.cassandradb.port:9042 # Ignore this property -app.company.name=My ABC Company +custom.app.company.name=My ABC Company # Spring JPA properties spring.datasource.url=jdbc:mysql://localhost:3306/kafkametadb?autoReconnect=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC diff --git a/src/main/resources/scripts/base/cassandra/3.4_updates/alter.sql b/src/main/resources/scripts/base/cassandra/3.4_updates/alter.sql new file mode 100644 index 0000000..84c492b --- /dev/null +++ b/src/main/resources/scripts/base/cassandra/3.4_updates/alter.sql @@ -0,0 +1,7 @@ +ALTER TABLE kafkamanagementapi.env ADD other_params text; + +Insert into kafkamanagementapi.env(name,host,port,protocol,type,other_params) values ('DEV','localhost','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); + +Insert into kafkamanagementapi.env(name,host,port,protocol,type,other_params) values ('TST','tesstserver','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); + +Insert into kafkamanagementapi.env(name,host,port,protocol,type,other_params) values ('TST_SSL','tesstserver','9093','SSL','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); diff --git a/src/main/resources/scripts/base/cassandra/createcassandra.sql b/src/main/resources/scripts/base/cassandra/createcassandra.sql index 9bf7e1e..f1f96ce 100644 --- a/src/main/resources/scripts/base/cassandra/createcassandra.sql +++ b/src/main/resources/scripts/base/cassandra/createcassandra.sql @@ -18,7 +18,7 @@ Create table if not exists kafkamanagementapi.teams(team text,app text,teammail Create table if not exists kafkamanagementapi.users(userid text,pwd text,team text,roleid text,fullname text,PRIMARY KEY(userid)); -Create table if not exists kafkamanagementapi.env(name text,host text,port text,protocol text,type text,keystorelocation text,truststorelocation text,keystorepwd text,keypwd text,truststorepwd text,PRIMARY KEY(name)); +Create table if not exists kafkamanagementapi.env(name text,host text,port text,protocol text,type text,keystorelocation text,truststorelocation text,keystorepwd text,keypwd text,truststorepwd text, other_params text, PRIMARY KEY(name)); Create table if not exists kafkamanagementapi.productdetails(name text,version text,PRIMARY KEY(name)); diff --git a/src/main/resources/scripts/base/cassandra/insertdata.sql b/src/main/resources/scripts/base/cassandra/insertdata.sql index 81a7f01..a3391e7 100644 --- a/src/main/resources/scripts/base/cassandra/insertdata.sql +++ b/src/main/resources/scripts/base/cassandra/insertdata.sql @@ -22,11 +22,11 @@ Insert into kafkamanagementapi.teams(team,app,teammail,teamphone) values('Team3' /* Insert env */ -Insert into kafkamanagementapi.env(name,host,port,protocol,type) values ('DEV','localhost','9092','PLAIN','kafka'); +Insert into kafkamanagementapi.env(name,host,port,protocol,type,other_params) values ('DEV','localhost','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); -Insert into kafkamanagementapi.env(name,host,port,protocol,type) values ('TST','tesstserver','9092','PLAIN','kafka'); +Insert into kafkamanagementapi.env(name,host,port,protocol,type,other_params) values ('TST','tesstserver','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); -Insert into kafkamanagementapi.env(name,host,port,protocol,type) values ('TST_SSL','tesstserver','9093','SSL','kafka'); +Insert into kafkamanagementapi.env(name,host,port,protocol,type,other_params) values ('TST_SSL','tesstserver','9093','SSL','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); Insert into kafkamanagementapi.env(name,host,port,protocol,type) values ('DEV_SCHEMAREGISTRY','localhost','8081','PLAIN','schemaregistry'); diff --git a/src/main/resources/scripts/base/rdbms/3.4_updates/alter.sql b/src/main/resources/scripts/base/rdbms/3.4_updates/alter.sql new file mode 100644 index 0000000..7424cd3 --- /dev/null +++ b/src/main/resources/scripts/base/rdbms/3.4_updates/alter.sql @@ -0,0 +1,10 @@ +ALTER TABLE kafkametadb.env +ADD other_params varchar(250); + + +Insert into kafkametadb.env(name,host,port,protocol,type,other_params) values ('DEV','localhost','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); + +Insert into kafkametadb.env(name,host,port,protocol,type,other_params) values ('TST','tesstserver','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); + +Insert into kafkametadb.env(name,host,port,protocol,type,other_params) values ('TST_SSL','tesstserver','9093','SSL','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); + diff --git a/src/main/resources/scripts/base/rdbms/ddl-jdbc.sql b/src/main/resources/scripts/base/rdbms/ddl-jdbc.sql index fd0356a..ea5e9b0 100644 --- a/src/main/resources/scripts/base/rdbms/ddl-jdbc.sql +++ b/src/main/resources/scripts/base/rdbms/ddl-jdbc.sql @@ -112,6 +112,7 @@ Create table if not exists kafkametadb.env( keystorepwd varchar(25), keypwd varchar(25), truststorepwd varchar(25), + other_params varchar(250), PRIMARY KEY(name) ); diff --git a/src/main/resources/scripts/base/rdbms/insertdata.sql b/src/main/resources/scripts/base/rdbms/insertdata.sql index 30c8b47..d09105e 100644 --- a/src/main/resources/scripts/base/rdbms/insertdata.sql +++ b/src/main/resources/scripts/base/rdbms/insertdata.sql @@ -22,11 +22,11 @@ Insert into kafkametadb.teams(team,app,teammail,teamphone) values('Team3','App1' /* Insert env */ -Insert into kafkametadb.env(name,host,port,protocol,type) values ('DEV','localhost','9092','PLAIN','kafka'); +Insert into kafkametadb.env(name,host,port,protocol,type,other_params) values ('DEV','localhost','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); -Insert into kafkametadb.env(name,host,port,protocol,type) values ('TST','tesstserver','9092','PLAIN','kafka'); +Insert into kafkametadb.env(name,host,port,protocol,type,other_params) values ('TST','tesstserver','9092','PLAIN','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); -Insert into kafkametadb.env(name,host,port,protocol,type) values ('TST_SSL','tesstserver','9093','SSL','kafka'); +Insert into kafkametadb.env(name,host,port,protocol,type,other_params) values ('TST_SSL','tesstserver','9093','SSL','kafka','default.paritions=2,max.partitions=4,replication.factor=1'); Insert into kafkametadb.env(name,host,port,protocol,type) values ('DEV_SCHEMAREGISTRY','localhost','8081','PLAIN','schemaregistry'); diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 443e6f8..0a1e04d 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -318,6 +318,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/static/js/envs.js b/src/main/resources/static/js/envs.js index e469027..8d49ab4 100644 --- a/src/main/resources/static/js/envs.js +++ b/src/main/resources/static/js/envs.js @@ -61,6 +61,23 @@ app.controller("envsCtrl", function($scope, $http, $location, $window) { $scope.addNewEnv = function() { + + if($scope.addNewEnv.defparts.length<=0 || $scope.addNewEnv.defparts<=0) + { + alert("Default partitions should not be empty and should be greater than 0"); + return; + } + + if($scope.addNewEnv.defmaxparts.length<=0 || $scope.addNewEnv.defmaxparts<=0) + { + alert("Maximum partitions should not be empty and should be greater than 0"); + return; + } + if($scope.addNewEnv.defrepfctr.length<=0 || $scope.addNewEnv.defrepfctr<=0) + { + alert("Default replication factor should not be empty and should be greater than 0"); + return; + } var serviceInput = {}; serviceInput['name'] = $scope.addNewEnv.envname; @@ -69,10 +86,13 @@ app.controller("envsCtrl", function($scope, $http, $location, $window) { serviceInput['protocol'] = $scope.addNewEnv.protocol; serviceInput['type'] = $scope.addNewEnv.type; + serviceInput['otherParams'] = "default.paritions=" + $scope.addNewEnv.defparts + + ",max.partitions=" + $scope.addNewEnv.defmaxparts + ",replication.factor=" + $scope.addNewEnv.defrepfctr; + if (!window.confirm("Are you sure, you would like to add Env : " + $scope.addNewEnv.envname + ": " + "\nHost : " + $scope.addNewEnv.host + - "\nPort :" + $scope.addNewEnv.port + "\nPort : " + $scope.addNewEnv.port )) { return; } diff --git a/src/main/resources/static/js/serverConfig.js b/src/main/resources/static/js/serverConfig.js new file mode 100644 index 0000000..355299b --- /dev/null +++ b/src/main/resources/static/js/serverConfig.js @@ -0,0 +1,102 @@ +'use strict' + +// confirmation of delete +// edit +// solution for transaction +// message store / key / gui +var app = angular.module('serverConfigApp',[]); + +app.controller("serverConfigCtrl", function($scope, $http, $location, $window) { + + // Set http service defaults + // We force the "Accept" header to be only "application/json" + // otherwise we risk the Accept header being set by default to: + // "application/json; text/plain" and this can result in us + // getting a "text/plain" response which is not able to be + // parsed. + $http.defaults.headers.common['Accept'] = 'application/json'; + + + $scope.getAllServerProperties = function() { + $http({ + method: "GET", + url: "getAllServerConfig", + headers : { 'Content-Type' : 'application/json' } + }).success(function(output) { + $scope.allProps = output; + }).error( + function(error) + { + $scope.alert = error; + } + ); + } + + + $scope.getExecAuth = function() { + //alert("onload"); + $http({ + method: "GET", + url: "getExecAuth", + headers : { 'Content-Type' : 'application/json' } + }).success(function(output) { + $scope.statusauth = output.status; + if(output.status=="NotAuthorized") + $scope.alerttop = output.status; + }).error( + function(error) + { + $scope.alert = error; + } + ); + } + + $scope.getAuth = function() { + $http({ + method: "GET", + url: "getAuth", + headers : { 'Content-Type' : 'application/json' } + }).success(function(output) { + $scope.statusauth = output.status; + $scope.userlogged = output.username; + $scope.teamname = output.teamname; + $scope.notifications = output.notifications; + $scope.notificationsAcls = output.notificationsAcls; + $scope.statusauthexectopics = output.statusauthexectopics; + $scope.alerttop = output.alertmessage; + if(output.companyinfo == null){ + $scope.companyinfo = "Company not defined!!"; + } + else + $scope.companyinfo = output.companyinfo; + + if($scope.userlogged != null) + $scope.loggedinuser = "true"; + }).error( + function(error) + { + $scope.alert = error; + } + ); + } + + $scope.logout = function() { + //alert("onload"); + $http({ + method: "GET", + url: "logout" + }).success(function(output) { + + $location.path('/'); + $window.location.reload(); + }).error( + function(error) + { + $scope.alert = error; + } + ); + } + + +} +); \ No newline at end of file diff --git a/src/main/resources/templates/activityLog.html b/src/main/resources/templates/activityLog.html index 352abbb..7236923 100644 --- a/src/main/resources/templates/activityLog.html +++ b/src/main/resources/templates/activityLog.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/addEnv.html b/src/main/resources/templates/addEnv.html index 2eec77b..8f77672 100644 --- a/src/main/resources/templates/addEnv.html +++ b/src/main/resources/templates/addEnv.html @@ -319,6 +319,21 @@ + + + + Admin + + + + + Server Config + + + + + + @@ -406,7 +421,31 @@ Add Cluster Form Protocol + ng-init="addNewEnv.protocol = 'plain'" disabled type="text" title="" data-toggle="tooltip" data-trigger="hover" class="form-control" data-original-title="Default number of partitions of a topic, used when creating a topic"> + + + + + Default Partitions + + + + + + + Default Max Partitions + + + + + + + Default Replication factor + + @@ -461,9 +500,6 @@ Add Cluster Form - - - diff --git a/src/main/resources/templates/addTeam.html b/src/main/resources/templates/addTeam.html index fe50fc2..2ec9a49 100644 --- a/src/main/resources/templates/addTeam.html +++ b/src/main/resources/templates/addTeam.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/addUser.html b/src/main/resources/templates/addUser.html index 7bfd5a8..bdb598a 100644 --- a/src/main/resources/templates/addUser.html +++ b/src/main/resources/templates/addUser.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/browseAcls.html b/src/main/resources/templates/browseAcls.html index d9eefa8..6a7aee7 100644 --- a/src/main/resources/templates/browseAcls.html +++ b/src/main/resources/templates/browseAcls.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/browseTopics.html b/src/main/resources/templates/browseTopics.html index 300a0fd..2a87255 100644 --- a/src/main/resources/templates/browseTopics.html +++ b/src/main/resources/templates/browseTopics.html @@ -332,6 +332,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/changePwd.html b/src/main/resources/templates/changePwd.html index 3f5d229..43f6b5d 100644 --- a/src/main/resources/templates/changePwd.html +++ b/src/main/resources/templates/changePwd.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/envs.html b/src/main/resources/templates/envs.html index 5e65f1a..c92f659 100644 --- a/src/main/resources/templates/envs.html +++ b/src/main/resources/templates/envs.html @@ -440,6 +440,7 @@ Kafka Clusters Port Protocol Type + Other Params @@ -450,6 +451,7 @@ Kafka Clusters {{ allenv.port }} {{ allenv.protocol }} {{ allenv.type }} + {{ allenv.otherParams }} @@ -506,9 +508,6 @@ Kafka Clusters - - - diff --git a/src/main/resources/templates/execAcls.html b/src/main/resources/templates/execAcls.html index e3192f8..957bbec 100644 --- a/src/main/resources/templates/execAcls.html +++ b/src/main/resources/templates/execAcls.html @@ -313,6 +313,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/execSchemas.html b/src/main/resources/templates/execSchemas.html index 0ff8ed9..e19d7c2 100644 --- a/src/main/resources/templates/execSchemas.html +++ b/src/main/resources/templates/execSchemas.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/execTopics.html b/src/main/resources/templates/execTopics.html index 3c1bece..f702d55 100644 --- a/src/main/resources/templates/execTopics.html +++ b/src/main/resources/templates/execTopics.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 5dc94b6..c16abee 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -309,6 +309,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/myProfile.html b/src/main/resources/templates/myProfile.html index 489bb86..9dbf467 100644 --- a/src/main/resources/templates/myProfile.html +++ b/src/main/resources/templates/myProfile.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/myRequests.html b/src/main/resources/templates/myRequests.html index 0dbb92a..ab907a2 100644 --- a/src/main/resources/templates/myRequests.html +++ b/src/main/resources/templates/myRequests.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/pcTopics.html b/src/main/resources/templates/pcTopics.html index d36f8bd..1766651 100644 --- a/src/main/resources/templates/pcTopics.html +++ b/src/main/resources/templates/pcTopics.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/requestAcls.html b/src/main/resources/templates/requestAcls.html index 308138c..f4a2593 100644 --- a/src/main/resources/templates/requestAcls.html +++ b/src/main/resources/templates/requestAcls.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + @@ -361,7 +376,7 @@ Request an ACL - ACL (Access Control List) Request Form + ACL (Access Control) Request Form diff --git a/src/main/resources/templates/requestSchema.html b/src/main/resources/templates/requestSchema.html index 8ff80ef..5724d39 100644 --- a/src/main/resources/templates/requestSchema.html +++ b/src/main/resources/templates/requestSchema.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/requestTopics.html b/src/main/resources/templates/requestTopics.html index 6c4cd72..edb43ac 100644 --- a/src/main/resources/templates/requestTopics.html +++ b/src/main/resources/templates/requestTopics.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + @@ -402,6 +417,7 @@ Topic Request Form Topic Partitions * + Check default parameters @@ -459,9 +475,6 @@ Topic Request Form - - - diff --git a/src/main/resources/templates/serverConfig.html b/src/main/resources/templates/serverConfig.html new file mode 100644 index 0000000..46497a7 --- /dev/null +++ b/src/main/resources/templates/serverConfig.html @@ -0,0 +1,449 @@ + + + + + + + + + + + Server Config | Kafka Self-service Topic Management Portal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ notifications }} + + + + + + + + {{ notificationsAcls }} + + + + + + + + + + + + + {{userlogged}} + {{teamname}} + + + + + + + + + + My Profile + + + Change Password + + + Logout + + + + + + + + + + + + + + + + + Server Config + + + + + + + + + Admin-Panel + Server Config + + + + + + + + + + + × + Ah snap!! {{ alerttop }}. + + + + × + Alert : {{ alert }}. + + + + × + Ah snap!! {{ errorMessage }}. + + + + + + + Server Properties + + + + + + Key + Value + + + + + {{ oneProp.key }} + {{ oneProp.value }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/showTeams.html b/src/main/resources/templates/showTeams.html index b881a2d..1051b26 100644 --- a/src/main/resources/templates/showTeams.html +++ b/src/main/resources/templates/showTeams.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/showUsers.html b/src/main/resources/templates/showUsers.html index cdbd3e2..ba4e495 100644 --- a/src/main/resources/templates/showUsers.html +++ b/src/main/resources/templates/showUsers.html @@ -320,6 +320,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/synchronizeAcls.html b/src/main/resources/templates/synchronizeAcls.html index 99eb70a..d3edb06 100644 --- a/src/main/resources/templates/synchronizeAcls.html +++ b/src/main/resources/templates/synchronizeAcls.html @@ -309,6 +309,21 @@ + + + + Admin + + + + + Server Config + + + + + + diff --git a/src/main/resources/templates/synchronizeTopics.html b/src/main/resources/templates/synchronizeTopics.html index 2ef3eaa..defc2a9 100644 --- a/src/main/resources/templates/synchronizeTopics.html +++ b/src/main/resources/templates/synchronizeTopics.html @@ -309,6 +309,21 @@ + + + + Admin + + + + + Server Config + + + + + +