| /** | |
| * Licensed to the Apache Software Foundation (ASF) under one or more | |
| * contributor license agreements. See the NOTICE file distributed with | |
| * this work for additional information regarding copyright ownership. | |
| * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| * (the "License"); you may not use this file except in compliance with | |
| * the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| namespace Kafka.Client.Consumers | |
| { | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Globalization; | |
| using System.Reflection; | |
| using System.Text; | |
| using System.Web.Script.Serialization; | |
| using log4net; | |
| internal class TopicCount | |
| { | |
| private static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | |
| private readonly IDictionary<string, int> topicCountMap; | |
| private readonly string consumerIdString; | |
| public TopicCount(string consumerIdString, IDictionary<string, int> topicCountMap) | |
| { | |
| this.topicCountMap = topicCountMap; | |
| this.consumerIdString = consumerIdString; | |
| } | |
| public static TopicCount ConstructTopicCount(string consumerIdString, string json) | |
| { | |
| Dictionary<string, int> result = null; | |
| var ser = new JavaScriptSerializer(); | |
| try | |
| { | |
| result = ser.Deserialize<Dictionary<string, int>>(json); | |
| } | |
| catch (Exception ex) | |
| { | |
| Logger.ErrorFormat(CultureInfo.CurrentCulture, "error parsing consumer json string {0}. {1}", json, ex); | |
| } | |
| return new TopicCount(consumerIdString, result); | |
| } | |
| public IDictionary<string, IList<string>> GetConsumerThreadIdsPerTopic() | |
| { | |
| var result = new Dictionary<string, IList<string>>(); | |
| foreach (KeyValuePair<string, int> item in topicCountMap) | |
| { | |
| var consumerSet = new List<string>(); | |
| for (int i = 0; i < item.Value; i++) | |
| { | |
| consumerSet.Add(consumerIdString + "-" + i); | |
| } | |
| result.Add(item.Key, consumerSet); | |
| } | |
| return result; | |
| } | |
| public override bool Equals(object obj) | |
| { | |
| var o = obj as TopicCount; | |
| if (o != null) | |
| { | |
| return this.consumerIdString == o.consumerIdString && this.topicCountMap == o.topicCountMap; | |
| } | |
| return false; | |
| } | |
| /* | |
| return json of | |
| { "topic1" : 4, | |
| "topic2" : 4 | |
| } | |
| */ | |
| public string ToJsonString() | |
| { | |
| var sb = new StringBuilder(); | |
| sb.Append("{ "); | |
| int i = 0; | |
| foreach (KeyValuePair<string, int> entry in this.topicCountMap) | |
| { | |
| if (i > 0) | |
| { | |
| sb.Append(","); | |
| } | |
| sb.Append("\"" + entry.Key + "\": " + entry.Value); | |
| i++; | |
| } | |
| sb.Append(" }"); | |
| return sb.ToString(); | |
| } | |
| } | |
| } |